1、项目十项目十 JavaJava的数据库编程开发的数据库编程开发 10.1 JDBC概述概述 10.2 应用应用JDBC访问数据库访问数据库 10.3 拓拓 展展 实实 训训2022年8月8日星期一210.1 JDBC概述概述JDBC(Java JDBC(Java DataBaseDataBase ConnectityConnectity,JavaJava数据库连接数据库连接)由由一些一些JavaJava语言编写的类和接口组成,是一种可用于执行语言编写的类和接口组成,是一种可用于执行SQL(SQL(结结构化查询语言构化查询语言)语句的语句的Java APIJava API。JDBCJDBC为数据
2、库应用开发人员、为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯使开发人员可以用纯JavaJava语言编写完整的数据库应用程序。语言编写完整的数据库应用程序。2022年8月8日星期一310.1.1 JDBC的功能简介的功能简介JDBCJDBC是由一系列连接是由一系列连接(Connection)(Connection)、SQLSQL语句语句(Statement)(Statement)和结果集和结果集(ResultSetResultSet)构成的,其主要作用概括起来有构成的,其主要作用概括起来有
3、3 3个方面:个方面:(1)(1)建立与数据库的连接;建立与数据库的连接;(2)(2)向数据库发起查询请求;向数据库发起查询请求;(3)(3)处理数据库返回结果。处理数据库返回结果。2022年8月8日星期一410.1.2 JDBC的数据库访问模型的数据库访问模型JavaJava的客户端程序大致可以分为两类:的客户端程序大致可以分为两类:Java AppletJava Applet和和Java ApplicationJava Application。相对于客户端来说,。相对于客户端来说,JDBC APIJDBC API既支持数据既支持数据库访问的两层模型,同时也支持三层模型。库访问的两层模型,同
4、时也支持三层模型。2022年8月8日星期一510.1.2 JDBC的数据库访问模型的数据库访问模型图图10-1 JDBC 两层两层应用应用模型模型2022年8月8日星期一610.1.2 JDBC的数据库访问模型的数据库访问模型图图10-2 JDBC 三三层层应用应用模型模型2022年8月8日星期一710.1.3 JDBC的的API介绍介绍JDBCJDBC核心类库包含在核心类库包含在java.sqljava.sql中,其中几个重要的接口中,其中几个重要的接口如如下下表所示。表所示。接 口作 用java.sql.DriverManager处理驱动程序的加载和建立数据库连接java.sql.Conn
5、ection处理与特定数据库的连接java.sql.Statement在指定连接中处理SQL语句java.sql.ResultSet处理数据库操作结果集2022年8月8日星期一810.2 应用应用JDBC访问数据库访问数据库图图10-3 使用使用JDBC操作数据库操作数据库2022年8月8日星期一910.2.1 加载加载JDBC驱动驱动使用使用JDBCJDBC的第一步是加载驱动程序,多数的数据库都有的第一步是加载驱动程序,多数的数据库都有JDBCJDBC驱动程序。驱动程序。JavaJava通过类通过类ClassClass的静态方法的静态方法forNameforName()()载入数据载入数据库
6、驱动程序,库驱动程序,Class.forNameClass.forName(String(String strstr)方法能将方法能将strstr字符串所字符串所对应的类实例化。加载数据库驱动程序的方法如下:对应的类实例化。加载数据库驱动程序的方法如下:Class.forNameClass.forName(驱动程序串驱动程序串);或或DriverManager.registerDriverDriverManager.registerDriver(驱动程序实例驱动程序实例);2022年8月8日星期一1010.2.1 加载加载JDBC驱动驱动目前,比较常见的目前,比较常见的JDBCJDBC驱动程序
7、有驱动程序有4 4种:种:JDBC-ODBCJDBC-ODBC桥连接桥连接驱动、本地驱动、本地APIAPI驱动、网络协议驱动、本地协议驱动。驱动不同,驱动、网络协议驱动、本地协议驱动。驱动不同,加载的方式也有区别。但是无论采用哪种加载驱动的方法,都不加载的方式也有区别。但是无论采用哪种加载驱动的方法,都不会影响操作数据库的逻辑代码,有利于代码的维护和升级。会影响操作数据库的逻辑代码,有利于代码的维护和升级。2022年8月8日星期一1110.2.2 创建数据库连接创建数据库连接首先使用首先使用java.sqljava.sql包中的包中的ConnectionConnection类声明一个连接对象,
8、类声明一个连接对象,然后再使用然后再使用DriverManagerDriverManager类调用它的静态方法类调用它的静态方法getConnectiongetConnection创创建这个连接对象:建这个连接对象:Connection conn=DriverManager.getConnection(Connection conn=DriverManager.getConnection(连接连接字符串字符串,用户名用户名,密码密码););2022年8月8日星期一1210.2.2 创建数据库连接创建数据库连接采用不同的采用不同的JDBCJDBC加载方式或连接不同的数据库时,连接字加载方式或连接
9、不同的数据库时,连接字符串也是不同的。符串也是不同的。1.JDBC-ODBC1.JDBC-ODBC桥方式连接数据库桥方式连接数据库以以JDBC-ODBCJDBC-ODBC桥方式连接数据库时,其连接字符串为桥方式连接数据库时,其连接字符串为“jdbc:odbc:jdbc:odbc:数据源名数据源名”。例如,数据源名为。例如,数据源名为studentstudent,以,以JDBC-JDBC-ODBCODBC方式连接方式连接AccessAccess数据库,则连接字符串为数据库,则连接字符串为“jdbc:odbc:studentjdbc:odbc:student”。2022年8月8日星期一1310.2
10、.2 创建数据库连接创建数据库连接创建连接的方法如下:创建连接的方法如下:Connection conn=Connection conn=DriverManager.getConnection(jdbc:odbc:driver=MicrosofDriverManager.getConnection(jdbc:odbc:driver=Microsoft Access Driver(t Access Driver(*.mdb);DBQ=E:/student.mdb,.mdb);DBQ=E:/student.mdb,username,password);username,password);2022
11、年8月8日星期一1410.2.2 创建数据库连接创建数据库连接2.Java2.Java数据库驱动程序连接数据库数据库驱动程序连接数据库采用采用JavaJava数据库驱动程序连接数据库时,对于不同的数据数据库驱动程序连接数据库时,对于不同的数据库,其连接字符串也有所不同。以数据库名为库,其连接字符串也有所不同。以数据库名为studentstudent为例,常为例,常用的几个数据库的连接字符串如用的几个数据库的连接字符串如下下表所示。表所示。数据库连接字符串SQL Server 2000jdbc:microsoft:sqlserver:/localhost:1433;database name=s
12、tudentSQL Server 2005jdbc:sqlserver:/localhost:1433;database=studentMySQLjdbc:mysql:/localhost/studentOraclejdbc:oracle:thin:localhost:1521:student2022年8月8日星期一1510.2.3 执行查询语句执行查询语句执行查询语句主要可以分为两个步骤:向数据库发送执行查询语句主要可以分为两个步骤:向数据库发送SQLSQL查询语句和处理查询结果。本节以查询语句和处理查询结果。本节以JDBC-ODBCJDBC-ODBC方式连接方式连接AccessAccess
13、数数据库为例。据库为例。1 1、向数据库发送向数据库发送SQLSQL查询语句查询语句使用使用StatementStatement接口声明一个接口声明一个SQLSQL语句对象,然后再让语句对象,然后再让ConnectionConnection接口已创建的连接对象接口已创建的连接对象connconn调用调用createStatement()createStatement()方法创建这个方法创建这个SQLSQL语句对象,语句对象,Statement stmt=conn.createStatement();Statement stmt=conn.createStatement();2022年8月8日星
14、期一1610.2.3 执行查询语句执行查询语句2 2、处理查询结果处理查询结果创建了创建了SQLSQL语句对象之后,这个对象就可以调用相应的方语句对象之后,这个对象就可以调用相应的方法实现对数据库中的表的查询,并将查询结果存放在一个法实现对数据库中的表的查询,并将查询结果存放在一个ResultSetResultSet类声明的对象中。即类声明的对象中。即SQLSQL语句对数据库的查询操作将返语句对数据库的查询操作将返回一个回一个ResultSetResultSet对象对象。2022年8月8日星期一1710.2.4 处理数据集处理数据集调用调用executeQuery()executeQuery(
15、)方法执行查询语句返回的结果是实现方法执行查询语句返回的结果是实现ResultSetResultSet接口的对象,可以对返回的结果进行处理。接口的对象,可以对返回的结果进行处理。ResultSetResultSet对象在获得一行数据后,就可以使用对象在获得一行数据后,就可以使用getXxxgetXxx方方法获得字段值,法获得字段值,getXxxgetXxx方法中的参数可以为列的索引,也可以为方法中的参数可以为列的索引,也可以为列名。列名。2022年8月8日星期一1810.2.5 更新数据库操作更新数据库操作StatementStatement对象不仅可以实现对数据库的查询,还可以对对象不仅可以
16、实现对数据库的查询,还可以对数据库进行更新,如添加、修改、删除记录。调用数据库进行更新,如添加、修改、删除记录。调用StatementStatement对对象的象的executeUpdate()executeUpdate()方法可以实现对数据库的更新操作,方法可以实现对数据库的更新操作,executeUpdateexecuteUpdate方法返回更新的数据库表中记录的条数,因此其方法返回更新的数据库表中记录的条数,因此其返回类型为返回类型为intint类型,其方法的定义如下:类型,其方法的定义如下:public int executeUpdate(String sqlStatement);pu
17、blic int executeUpdate(String sqlStatement);2022年8月8日星期一1910.2.6 断开与数据库的连接断开与数据库的连接在对数据库操作完毕后,需要依次将在对数据库操作完毕后,需要依次将ResultSetResultSet、StatementStatement、ConnectionConnection对象关闭,以释放所占用的资源。例如:对象关闭,以释放所占用的资源。例如:rs.close();rs.close();stmt.close();stmt.close();conn.close();conn.close();2022年8月8日星期一2010.
18、2.7 应用应用JDBC访问访问SQL Server数据库数据库测试JDBC是否已连接SQL Server数据库(参考教材204页)import java.sql.*;public class Test public static void main(String srg)/JDBC驱动名 String driverName=com.microsoft.sqlserver.jdbc.SQLServerDriver;/连接服务器和数据库sampleString dbURL=jdbc:sqlserver:/localhost:1433;DatabaseName=sample;String user
19、Name=sa;/默认用户名 String userPwd=123456;/密码 Connection dbConn;2022年8月8日星期一2110.2.7 应用应用JDBC访问访问SQL Server数据库数据库测试JDBC是否已连接SQL Server数据库(参考教材204页)try /加载JDBC驱动Class.forName(driverName);/建立与数据库的连接dbConn=DriverManager.getConnection(dbURL,userName,userPwd);System.out.println(Connection Successful!);/如果连接成功
20、 控制台输出Connection Successful!catch(Exception e)e.printStackTrace();2022年8月8日星期一2210.3 拓展实训拓展实训【实训10-1】用JDBC连接Access数据库,并测试是否连接成功。要求建立ODBC数据源,在Access中创建employee数据库,编写Java控制台应用程序,通过JDBC-ODBC桥方式访问数据库并测试是否连接成功。(1)建立ODBC数据源。建立ODBC数据源的过程请参看任务二中的加载JDBC驱动部分。(2)编写JDBC程序。创建完数据源之后,就可以使用JDBC编写程序,来测试是否能够成功地连接数据库d
21、atabase.mdb。(参见教材204页)2022年8月8日星期一2310.3 拓展实训拓展实训【实训10-2】在实训10-1所建的数据库employee中,创建employee表,字段包括e_id、e_name、e_age、e_gengder。要求编写Java控制台应用程序,用JDBC连接数据库,读取employee表中的数据,并输出结果。(1)在employee数据库中创建表employee,表中的字段包括e_id、e_name、e_age、e_gengder,并在employee表中输入若干条记录。(2)编写Java控制台应用程序,用JDBC连接数据库。(参见教材205页)谢谢 谢谢!