第十三章 JDBC JDBC简介 JDBC驱动类型 JDBC API JDBC的发展
JDBC简介 而设计的API类。 JAVA方法。 JDBC是为在Java Applet和应用程序中访问关系数据库 在JDBC规范中,成功地提供了SQL数据库访问的 JAVA方法。
JDBC应用框架
数据库访问的两层模型
数据库访问的三层模型
JDBC与ODBC 因为语言本身的差异,不能将ODBC C API 逐字翻译为 JAVA API。 ODBC API是C 的库函数,在JAVA程序中不能直接使用。 因为语言本身的差异,不能将ODBC C API 逐字翻译为 JAVA API。 使用JDBC使应用程序保持“纯JAVA”的可移植性等。
JDBC 驱动类型
JDBC 驱动类型 JDBC调用ODBC 调用。要求ODBC代码、client端代码 都要在客户机上安装。 JDBC-ODBC桥(JDBC-ODBC bridge) JDBC调用ODBC 调用。要求ODBC代码、client端代码 都要在客户机上安装。 本地API部分JAVA驱动(Native-API partly-Java driver) JDBC调用 数据库的Client 端API,也需要在客户机上 安装代码。 网络协议完全JAVA驱动(JDBC-Net pure Java driver) JDBC调用 独立于任何DBMS的网络协议,该协议 将由另外一个服务器转换为某种DBMS协议。 本地协议完全JAVA驱动(Native-protocol pure Java driver) JDBC调用 特定DBMS的网络协议。
JDBC API 功能 建立与数据库的连接 发送SQL语句 处理结果
JDBC API 类 类型 JDBC类 Java.sql.Driver java.sql.DriverManager java.sql.DrivePropertyInfo 驱动程序管理 数据库连接 Java.sql.Connection java.sql.Statement java.sql.PreparedStatement java.sql.CallableStatement SQL语句 数据 java.sql.ResultSet 错误 java.sql.SQLException java.sql.SQLWarning
JDBC 类层次 executeUpdate( ) executeQuery( ) execute( ) getMoreResults( ) 驱动程序管理器 连接 连接 连接 语句 语句 准备语句 可调用语句 executeUpdate( ) 元数据 executeQuery( ) 结果组 execute( ) 数据 getMoreResults( ) getResultsSet( )
建立与数据库的连接 从系统属性java.sql中读取Driver的类名,并一一注册。 JDBC的DriverManager查找到相应的数据库Driver并装载。 从系统属性java.sql中读取Driver的类名,并一一注册。 在程序中使用Class.forName( )方法动态装载并注册Driver。 如Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”), 注册JDBC-ODBC桥。 通过DriverManager.getConnection( )与数据库建立连接 数据库连接串URL,指定数据源以及使用的数据库访问 协议。 语法格式:jdbc:<subprotocol>:<subname> 例:通过JDBC-ODBC桥接驱动与wombat数据源建立连接。 Connection con = DriverManager.getConnection(“jdbc:odbc: wombat”,”username”,”password”);
传送SQL语句 发送到所连接的数据库。 PreparedStatement 对象。 在数据库连接上创建Statement对象,将各种SQL语句 发送到所连接的数据库。 /* 传送SQL语句并得到结果集rs */ Statement stmt = con.createStatement( ); ResultSet rs = stmt.executeQuery(“ SELECT a, b, c FROM Table1”); 对于多次执行但参数不同的SQL语句,可以使用 PreparedStatement 对象。 使用CallableStatement对象调用数据库上的存储过程。
处理结果集 数据类型的不同,使用不同的方法读取数据。 /*处理结果集 rs*/ while (rs.next( )){ 结果集是查询语句返回的数据库记录的集合。 在结果集中通过游标(Cursor)控制具体记录的访问。 SQL数据类型与JAVA数据类型的转换—— 根据SQL 数据类型的不同,使用不同的方法读取数据。 /*处理结果集 rs*/ while (rs.next( )){ int x = rs.getInt(“a”); String s = rs.getString(“b”); float f = getFloat(“c”); } stmt.close( ); con.close( );
JDBC应用的发展 JAVA嵌入式SQL—— SQLJ,在JAVA源代码中嵌入非 过程化的SQL语句。 JDBC直接调用SQL命令,属于较低层的API。 以JDBC为基础的高层接口: JAVA嵌入式SQL—— SQLJ,在JAVA源代码中嵌入非 过程化的SQL语句。 关系数据库表映射到JAVA类,JAVABland。