【黑马程序员】第5课:JDBC连接MySQL数据库

<pre>

day05

上节内容回顾

(1)数据库语句

*创建数据库和查看数据库的语句

*切换数据库和删除数据库语句

(2)数据库表语句

*创建数据库表的语句

*创建带约束的表

**mysql的约束有三个

*删除表

(3)表中的记录语句

*插入记录 insert

**如果类型是int类型,直接写值

**如果varchar或者日期类型,使用单引号包起来

*更新记录 update

*删除记录 delete

*查询记录

select.. from ... where ...group by having ...order by..

*聚集函数: count sum  max min avg

*去除重复 distinct

*别名 as ...

*mysql的关键字 limit

*多表之间关系

**一对多 ,多对多

*内连接和外连接

思维导图

1myeclipse工具的安装

*安装myeclipse10.x版本

**安装过程中目录中不能带中文和空格

**启动myeclipse时候,工作空间也不能带中文和空格

**破解过程中,电脑中不能安装其他版本的myeclipse

2jdbc简介

(1)什么是jdbc:JavaDataBase Connectivity,java数据库的连接

*比如有一台电脑,想要在电脑上安装显卡,需要显卡的驱动,是由显卡生产厂商提供的

*想要使用java操作数据库,需要由数据库生产厂商提供的驱动。

**一个程序员,要使用jdbc对不同的数据库进行操作,除了要掌握java代码之外,还要掌握不同的数据库驱动的代码,

对于程序员的压力很大很大。

**sun公司针对这种情况,提供了解决方案,提供一套标准的接口,各个数据库针对这套接口提供了实现类,程序员只需要

掌握这套接口就可以了,这套接口就是jdbc。

(2)如果想要使用jdbc对数据库进行操作,首先安装数据库的驱动,不同的数据库厂商使用jar包的形式提供的,

只需要把数据库的jar导入到项目里面去,就相当于安装了驱动。

(3)导入jar包的方法:如果要操作mysql数据库,需要导入mysql-connector-java-5.0.8-bin.jar

*在项目里面创建一个文件夹,把jar复制到文件夹里面,选择jar包,右键点击 build path -- add to build path

当看到jar前面的图片变成了类似奶瓶的图标,表示jar导入到了项目里面。

3jdbc的入门案例

(1)使用java的jdbc操作数据库步骤是固定的(记住)

*使用jdbc对数据库进行操作使用到这些类和接口

**DriverManager

**Connection

**Statement

**ResultSet

第一步,加载数据库的驱动

*DriverManager.registerDriver(new Driver());

Class.forName("com.mysql.jdbc.Driver");

第二步,创建与数据库的连接

*Connection conn = DriverManager.getConnection(url,username,password);

第三步,编写sql语句

*String sql = "select * from user";

第四步,执行sql语句

*//创建statement对象

Statementstmt = conn.createStatement();

*查询操作,执行 stmt.executeQuery(sql);

*返回ResultSet,结果集,遍历结果集得到每一行的记录

第五步,释放资源(关闭连接)

*调用close方法关闭连接

*原则:谁最后打开,谁最先关闭

**入门案例的代码:

//加载驱动 使用DriverManager

DriverManager.registerDriver(newDriver());

//创建连接Connection

Connectionconn =DriverManager.getConnection("jdbc:mysql://localhost:3306/day05","root", "root");

//编写sql

Stringsql = "select * from user";

//执行sqlStatement

//创建statement对象

Statementstmt = conn.createStatement();

ResultSetrs = stmt.executeQuery(sql);

//遍历结果集

while(rs.next()){

//得到每一行的记录

intid = rs.getInt("id");

Stringusername = rs.getString("username");

Stringpassword = rs.getString("password");

System.out.println(id+":: "+username+" :: "+password);

}

//关闭连接

rs.close();

stmt.close();

conn.close();

4jdbcDriverManager对象

*java.sql 包下面的类

*可以做两件事情

第一件事情:加载数据库驱动

**registerDriver(Driver driver)

=参数是Driver对象,这个对象是数据库里面驱动对象

***这种方式一般在实际开发中不使用,会加载驱动两次(通过查看mysql的源代码)

static{

try{

java.sql.DriverManager.registerDriver(newDriver());

}catch (SQLException E) {

thrownew RuntimeException("Can‘t register driver!");

}

}

**一般在开发中都使用反射的方式加载数据库驱动 Class.forName("");

***得到Class类有三种方式

=类名.class

=对象.getClass()

=Class.forName("");

第二件事情:创建与数据库的连接

ConnectiongetConnection(String url, String user, String password)

*有三个参数

**第一个参数:要连接的数据库地址和名称

***jdbc:mysql://数据库ip:数据库端口/数据库名称

=jdbc:mysql://localhost:3306/day05

***第一个参数有简写方式(使用的范围:当连接的是本机数据库,同时端口号是3306)

=jdbc:mysql:///day05

**第二个参数:连接数据库的用户名

**第三个参数:连接数据库的密码

5jdbcConnection对象

*使用java.sql 包里面的接口,代表数据库的连接

*方法:

(1)StatementcreateStatement() :创建执行sql的对象

(2)PreparedStatementprepareStatement(String sql) :得到预编译的对象

(3)CallableStatementprepareCall(String sql) :执行存储过程的方法

6jdbcStatement对象

*是java.sql 包里面的接口,执行sql语句的对象

*方法:

(1)ResultSetexecuteQuery(String sql) :执行查询操作的方法,返回ResultSet结果集

(2)intexecuteUpdate(String sql) :执行插入、修改、删除的方法,返回成功的记录数 int类型

(3)booleanexecute(String sql) :执行sql语句,返回结果如果是查询操作返回true,否则返回false

7jdbcResultSet对象

*是java.sql包里面的接口,表示做查询操作返回的结果集

*结果集

+------+----------+----------+

|id   | username | password |

+------+----------+----------+

|    1 | aaa     | 123456   |

|    2 | bbb     | bbb      |

+------+----------+----------+

*遍历结果集

**方法:next()

*得到每一条记录

**方法操作一:根据不同的类型使用不同的方法

=如果是int类型,使用int getInt("字段的名称")

=如果是varchar类型,使用getString("字段的名称")

=如果不知道类型,使用 Object getObject("字段的名称")

**方法操作二:根据不同的类型使用不同的方法

=如果是int类型,使用int getInt(字段的位置)

=如果是varchar类型,使用getString(字段的位置)

=如果不知道类型,使用 Object getObject(字段的位置)

*结果集的遍历的过程(画图分析)

**在没有执行next方法时候,在第一行之前,执行next方法之后,

一行一行的向下进行遍历,在默认情况下,只能向下不能向上。

8jdbc释放资源(关闭连接)

*原则:谁最后打开,谁最先关闭

**规范写法

**首先使用try-catch-finally,把释放资源的代码写到finally里面(finally里面的语句肯定会执行)

**if(rs != null) {

try{

rs.close();

}catch(Exceptione) {

}

//让jvm快速的回收

rs= null;

}

9、使用jdbc完成crud操作

*jdbc的操作步骤

**如果做查询操作时候,执行statement里面executeQuery方法,返回结果集ResultSet

**如果做增加修改和删除操作的时候,执行Statement里面executeUpdate方法,返回成功的记录数 int数目

**最终不要忘记释放资源

**做增加,修改,删除操作时候,只是sql语句不一样

**包含和查询比较,有很多的代码都是重复的,可以把类里面或者方法里面重复的代码提取到一个工具类里面,

在这些方法里面直接调用工具类里面的方法就可以了,这样可以节省代码量,利用代码的维护。

10jdbc工具类的封装(方法提取)

(1)获取数据库连接的方法

(2)释放资源的方法(查询和其他操作释放的不一样,重载一个方法传递不同的参数)

(3)数据库驱动的名称、用户名和密码可以进一步提取

**达到效果,如果修改数据库名称,不修改java代码,就可以把这些值放到一个配置文件里面,

在方法里面直接读取配置文件就可以了。

==================================================================================

上午内容总结:

(1)什么是jdbc:sun公司针对不同的数据库提供的标准接口

*如果要使用jdbc对数据库进行操作,首先导入不同的数据库的jar包

*导入jar包到项目步骤

(2)掌握jdbc代码步骤

* 1、加载数据库驱动

* 2、创建连接

* 3、编写sql

* 4、执行sql

* 5、释放资源

(3)jdbc里面的四个对象

*DriverManager

*Connection

*Statement

*ResultSet

(4)jdbc操作释放资源写法

*释放资源写在finally里面

*固定的写法

(5)掌握jdbc完成对数据库的crud操作代码(****)

(6)jdbc工具类封装方法

11jdbc工具类的封装

(1)获取数据库连接的方法

(2)释放资源的方法(查询和其他操作释放的不一样,重载一个方法传递不同的参数)

(3)把数据库驱动名称,url地址,用户名和密码放到配置文件中,在方法里面直接读取配置文件得到这些值

=properties格式的配置文件,类似于key-value形式

**     drivername=com.mysql.jdbc.Driver

url=jdbc:mysql:///day05

username=root

password=root

(4)读取properties文件的方式:

**有两种方式:

第一种方式:使用类Properties读取

**  load(InputStream inStream):表示把配置文件的输入流加载到类里面

***得到文件的输入流 InputStream in = new FileInputStream("");

**  String getProperty(String key) :根据配置文件里面的key得到value的值

***一般做文件操作的时候都使用字节流,InputStream。如果是字符流不能处理类似图片格式文件

**代码:

//第一种方式读取

Propertiesp = new Properties();

//得到文件的输入流

InputStreamin = new FileInputStream("src/db.properties");

p.load(in);

//根据名称得到值  String getProperty(String key)

Stringdrivername = p.getProperty("drivername");

Stringurl = p.getProperty("url");

Stringusername = p.getProperty("username");

Stringpassword = p.getProperty("password");

System.out.println(drivername+": "+url+" : "+username+" : "+password);

第二种方式:使用工具类,ResoutceBundle读取

**使用ResoutceBundle读取文件使用范围:

(1)只能读取properties格式的文件

(2)properties文件必须要放到src下面

**代码

Stringdrivername =ResourceBundle.getBundle("db").getString("drivername");

Stringurl = ResourceBundle.getBundle("db").getString("url");

Stringusername =ResourceBundle.getBundle("db").getString("username");

String password =ResourceBundle.getBundle("db").getString("password");

12、内容补充

*首先创建项目(java project 和 web project)

*在项目的src下面创建包 xx.xx.xxx

*在包里面创建类 :类命名方法,首字母大写

*在一个类里面定义变量命名规范

**总的原则:看到名字知道含义

**英语单词:userName

**使用汉语拼音:yonghuming

**一定不要既有英语也有汉语拼音 userMing

*java里面快捷键

**代码提示 alt /

**快速导包 ctrl shift o

**删除一行 ctrl d

13jdbc练习(登录后台代码实现)

*判断用户名和密码,同时都正确的话,登录成功

**通过查询数据库进行操作

***sql语句: select * from user where username=‘‘ and password=‘‘

14sql的注入

*select * from user where username=‘aaa‘ or ‘1=1‘ and password=‘‘

**在传递用户名的时候,这样写 aaa‘ or ‘1=1,密码可以为空,也可以登录成功

*sql注入可以PreparedStatement对象解决问题

**在connection里面PreparedStatement prepareStatement(String sql)

***这个对象代表预编译对象,在sql语句执行之前编译出来,防止注入

*PreparedStatement是一个接口,是Statement的子接口

**执行查询使用 ResultSet executeQuery()

**执行增加修改删除:int executeUpdate()

15PreparedStatement使用(***

**代码

//登录的逻辑的代码

publicstatic boolean login(String username,String password) {

//定义变量

Connectionconn = null;

PreparedStatementpsmt = null;

ResultSetrs = null;

try{

//使用工具类得到连接

conn= JDBCUtils.getConnection();

//编写sql

Stringsql ="select * from user where username=? and password=?";

//执行sql

//预编译sql

psmt= conn.prepareStatement(sql);

//设置两个参数

psmt.setString(1,username);

psmt.setString(2,password);

rs= psmt.executeQuery();

while(rs.next()){

System.out.println(rs.getString("username"));

returntrue;

}

}catch(Exception e ) {

}finally {

//释放资源

JDBCUtils.clear1(rs, psmt,conn);

}

returnfalse;

}

16、批处理的操作

*什么是批处理:同时执行多条sql语句

**应用:向一个表里面添加多条记录

*在Statement常用两个方法对批处理进行操作

**addBatch(String sql):把多个sql语句加到批处理操作里面

**executeBatch() :执行批处理里面的这些sql语句

17、事务的介绍

*有一组操作(有增加操作,还有一个修改的操作),在事务里面这些操作要么都成功,只要有一个失败,这些操作都失败。

**银行转账的操作肯定会用到事务操作

***如果小丽给小金转账一万,在小丽转账过程中出现了异常,小丽钱少了,但是小金没有收到这个钱,

就可以使用事务进行操作。

*事务四个特性:原子性、一致性、隔离性、持久性

*使用jdbc操作事务

**在mysql数据库里面,默认情况下事务是会自动提交

**设置mysql里面的事务不是自动提交,需要手动进行提交

=connection里面setAutoCommit(boolean autoCommit):如果不写默认的值true,可以设置值是false不会自动提交

=connection里面commit() :手动提交事务

=connection里面rollback():回滚事务(回到操作之前的状态)

**代码

//使用修改操作演示事务

publicstatic void main(String[] args) {

Connectionconn = null;

Statementstmt = null;

try{

//得到数据库的连接

conn= JDBCUtils.getConnection();

//设置数据库不会自动提交

conn.setAutoCommit(false);

//编写sql

Stringsql = "update user set username=‘EEEEE‘ where id=6";

//执行sql

stmt= conn.createStatement();

stmt.executeUpdate(sql);

//出现了异常

inta = 10/0;

//提交事务

conn.commit();

}catch(Exceptione) {

e.printStackTrace();

//回滚事务

try{

conn.rollback();

}catch (SQLException e1) {

}

}finally{

//释放资源

JDBCUtils.clear1(stmt,conn);

}

====================================================================================

今天内容的总结

(1)什么是jdbc:sun公司针对不同的数据库提供的标准接口

*如果要使用jdbc对数据库进行操作,首先导入不同的数据库的jar包

*导入jar包到项目步骤

(2)掌握jdbc代码步骤

* 1、加载数据库驱动

* 2、创建连接

* 3、编写sql

* 4、执行sql

* 5、释放资源

(3)jdbc里面的四个对象

*DriverManager

*Connection

*Statement

*ResultSet

(4)jdbc操作释放资源写法

*释放资源写在finally里面

*固定的写法

(5)掌握jdbc完成对数据库的crud操作代码(****)

(6)jdbc工具类封装方法

*读取配置文件两种方式(properties文件)

(7)使用工具类进行crud操作代码(****)

(8)jdbc简单登录后台案例

*登录实现逻辑

*sql注入

*解决sql注入漏洞的方法,使用PreparedStatement接口

(9)PreparedStatement接口,父接口是Statement(****)

*预编译

*使用PreparedStatement实现crud操作

(10)批处理

*同时执行多条sql语句

**statement里面操作批处理两个方法

(11)事务

*事务:要么多成功,要多都失败。

*事务四个特性

*使用jdbc操作事务三个方法

===================================================================

完成的任务:

(1)使用工具类进行crud操作代码至少写两遍

(2)使用PreparedStatement完成crud操作

</pre>

时间: 06-29

【黑马程序员】第5课:JDBC连接MySQL数据库的相关文章

java jdbc 连接mysql数据库 实现增删改查

好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的

JDBC连接MySQL数据库及演示样例

JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,能够为多种关系数据库提供统一訪问,它由一组用Java语言编写的类和接口组成.JDBC为数据库开发者提供了一个标准的API,据此能够构建更高级的工具和接口,使数据库开发者能够用纯 Java API 编写数据库应用程序,而且可跨平台执行,而且不受数据库供应商的限制.

(详细)JAVA使用JDBC连接MySQL数据库(1)- 软件

欢迎任何形式的转载,但请务必注明出处. 1.jdk 点击查看安装和环境配置教程 2.Eclipse 点击进入官网下载 注意下载完成打开.exe后,出现下图界面,有很多版本供选择 本人目前在学JSP所以安装的是Java EE版本,初学者可以选择第一个Java Developers版本 3.Mysql 点击进入官网下载 点击进入推荐安装教程+环境配置 下载页面注意事项 (虽然选项只有32位的,但下载完成后32位和64位都会安装) (上面的是在线安装,下面的是离线安装,建议选择离线安装) 系列文章 (

JAVA使用JDBC连接MySQL数据库 二(2)

本文是对 <JAVA使用JDBC连接MySQL数据库 二>的改进. 上节使用的是PreparedStatement来执行数据库语句,但是preparedStatement需要传递一个sql语句参数,才能创建.然而,DBHelper类只是起到打开和关闭数据库的作用,所以sql语句是要放到应用层部分的,而不是放到DBHelper类中. 而statment不需要传递一个sql语句参数,就能创建. 修改部分如下: public class DBHelper { String driver = &quo

使用JDBC连接MySQL数据库--典型案例分析(八)----实现员工数据的分页查询

转载请注明:http://blog.csdn.net/uniquewonderq 问题: 使用JDBC连接Mysql数据库,实现对Emp表数据的分页查询功能. 方案: 对于较大的数据量,通常采用分页查询的方式.不同的数据库产品有不同的数据库级的分页查询策略.例如:Oracle通常使用rownum的方式:而Mysql使用limit的方式. Oracle采用rownum和子查询实现分页查询,SQL语句如下, select * from (select rownum rn,empno,ename,jo

jdbc 连接mysql数据库

jdbc驱动到官网下载,放在jdk的相关目录下面,或者jar文件加入到工程下面 package test_mysql; import java.sql.*; import java.util.Set; public class testjdbc { public static Connection getConnection() throws ClassNotFoundException, SQLException{ String URL="jdbc:mysql://localhost:3306

Java 通过JDBC连接Mysql数据库的方法和实例——五部曲

一:把mysql-connector-java-5.1.20-bin.jar导入到本项目工程的目录下,步骤如下: (1)先新建一个Web Project项目,取项目名为test (2)右键点击工程下的JRE System Library --> Buid Path --> Configure Build Path --> Libraries --> Add Library --> User Library --> new --> 取名为MySQL --> 选

一、JAVA通过JDBC连接mysql数据库(连接)

JDBC ----JDBC(Java DataBase Connectivity)是Java与数据库的接口规范,JDBC定义了一个支持标准SQL功能的通用低层的应用程序编程接口(API),它由Java 语言编写的类和接口组成,旨在让各数据库开发商为Java程序员提供标准的数据库API. JDBC API定义了若干Java中的类,表示数据库连接.SQL指令.结果集.数据库元数据等.它允许Java程序员发送SQL指令并处理结果.通过驱动程序管理器,JDBC API可利用不同的驱动程序连接不同的数据库

Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序. 如果要使用数据库就要添加数据库的驱动,不同的数据库有不用的驱动,这里就不一一说明,添加jar程序驱动包的方法就不在这里解释, 另一个文章里面有介绍http://www.cnblogs.com/ta