第9章 JDBC

目录

 

9.1 什么是JDBC

9.2 JDBC 常用的 API

9.2.1 Driver 接口

9.2.2 DriverManager类

9.2.3 Connection 接口

9.2.4 Statement 接口

9.2.5 PreparedStatement 接口

9.2.6 ResultSet 接口

9.3 实现第一个JDBC程序

9.4 PreparedStatement对象

9.5 ResultSet对象

【任务9】使用JDBC完成数据的增删改查


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/databasename

jdbc: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.创建测试类


版权声明:本文为weixin_43723935原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。