目录
9.1 什么是JDBC
JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API。

9.2 JDBC 常用的 API
JDBC API主要位于java.sql包中。
9.2.1 Driver 接口
是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。
9.2.2 DriverManager类
用于加载JDBC驱动并创建与数据库的连接。

9.2.3 Connection 接口
代表Java程序和数据库的连接。

9.2.4 Statement 接口
用于执行静态的SQL语句,并返回一个结果对象。

9.2.5 PreparedStatement 接口
是Statement的子接口,用于执行预编译的SQL语句。该接口扩展了带有参数SQL语句的执行操作,应用该接口中的SQL语句可以使用占位符“?”来代替其参数,然后通过setXxx()方法为SQL语句的参数赋值。

setDate()方法可以设置日期内容,但参数Date的类型是java.sql.Date,而不是java.util.Date。

9.2.6 ResultSet 接口
用于保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中。在ResultSet接口内部有一个指向表格数据行的游标(或指针),ResultSet对象初始化时,游标在表格的第1行之前,调用next()方法可以将游标移动到下一行。如果下一行没有数据,则返回false。在程序中经常使用next()方法作为WHILE循环的条件来迭代ResultSet结果集。


9.3 实现第一个JDBC程序
(1)加载并注册数据库驱动
DriverManager.registerDriver(Driver driver);
或
Class.forName(DirverName);(2)通过DriverManager获取数据库连接
Connection conn=DriverManager.getConnection(String url, String user, String pwd);连接数据的URL地址、登录数据库的用户名和密码。
URL地址的书写格式如下
jdbc:mysql://hostname:port/databasenamejdbc:mysql:是固定的写法,mysql指的是MySQL数据库。hostname指的是主机的名称(如果数据库在本机中,hostname可以为localhost或127.0.0.1;如果要连接的数据库在其他电脑上hostname为所要连接电脑的IP),port指的是连接数据库的端口号(MySQL端口号默认为3306),而databasename指的是MySQL中相应数据库的名称。
(3)通过Connection对象获取Statement对象
Connection创建Statement的方式有如下3种。
- createStatement():创建基本的Statement对象。
- prepareStatement():创建PreparedStatement对象。
- prepareCall():创建CallableStatement对象。
以创建基本表的Statement对象为例,创建方式如下。
Statement stmt = conn.createStatement();(4)使用的Statement执行SQL语句
所有的Statement都有如下3种执行SQL语句的方法。
- execute():可以执行任何SQL语句
- executeQuery():通常执行查询语句,执行后返回代表结果集的ResultSet对象。
- executeUpdate():主要用于执行DML和DDL语句。执行DML语句,如INSERT、UPDATE或DELETE时,返回受SQL语句影响的行数,执行DDL语句返回0。
以executeQuery()方法为例,其使用方式如下。
//执行SQL语句,获取结果集ResultSet
ResultSet rs = stmt.executeQuery(sql);(5)操作ResultSet结果集
如果执行的SQL语句是查询语句,执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果。程序可以通过操作该ResultSet对象来取出查询结果。
(6)关闭连接,释放资源
每次操作数据库结束后都要关闭数据库连接,释放资源,包括关闭ResultSet、Statement和Connection等资源。
1.搭建数据库环境
CREATE DATABASES jdbc;
USE jdbc;
CREATE TABLE users(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(40),
passwrod VARCHAR(40),
email VARCHAR(60),
birthday DATE
)CHARACTER SET utf8 COLLATE utf8_general_ci;INSERT INTO users(NAME,PASSWORD,email,birthday)
VALUES('lisi','123456','lisi@sina.com','1981-12-04');
INSERT INTO users(NAME,PASSWORD,email,birthday)
VALUES('wangwu','123456','wangwu@sina.com','1979-12-04');
2.创建项目环境,导入数据库驱动
mysql-connector-java-5.0.8-bin.jar
3.编写JDBC程序





- 注册驱动
虽然使用DriverManager.registerDriver(new com.mysql.jdbc.Driver())方法也可以完成注册,但此方式会使数据库驱动被注册两次。这是因为Driver类的源码已经在静态代码块中完成了数据库驱动的注册。所以,为了避免数据库驱动被重复注册,只需在程序中使用Class.forName()方法加载驱动类即可。
- 释放资源
当数据库资源使用完毕后,一定要记得释放资源。在Java程序中,应该将最终必须要执行的操作放在finally代码块中。
9.4 PreparedStatement对象
PreparedStatement是Statement的子类,它可以对SQL语句进行预编译,预编译的信息会存储在PreparedStatement对象中。当相同的SQL语句再次执行时,程序会使用PreparedStatement对象中的数据,而不需要对SQL语句再次编译去查询数据库,这样就大大地提高了数据库的访问效率。



9.5 ResultSet对象
ResultSet主要用于存储结果集,可以通过next()方法由前向后逐个获取结果集中的数据。如果想要获取结果集中任意位置的数据,则需要在创建Statement对象时,设置两个ResultSet定义的常量,具体设置方式如下。
Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = st.excuteQuery(sql);常量“ResultSet.TYPE_SCROLL_INSENITIVE”表示结果集可滚动,常量“ResultSet.CONCUR_READ_ONLY”表示以只读形式打开结果集。




【任务9】使用JDBC完成数据的增删改查
【任务目标】
通过本章中所学的JDBC知识,完成对数据库中表数据的增删改查操作。
【实现步骤】
1.创建JavaBean


2.创建工具类


3.创建DAO








4.创建测试类










