目标:
设计多层数据库应用架构
用JDBC1.0建设一个多层数据库应用架构
面向对象的数据库应用设计
JDBC2.0的新属性介绍
内容:
JDBC简介
使用JDBC
OOAD和数据库设计
JDBC高级话题
JDBC标准扩展
Row set 实现
JDBC 和应用程序架构
第一部分 JDBC简介
JDBC 是Java Database Connectivity的简称
连接数据库的方法分为
1. ODBC:基于C的接口连接基于SQL的数据库引擎
2. JDBC:Java版本的ODBC
JDBC可以实现:
1. 连接数据库
2.发送SQL请求
3.处理数据库的返回结果
四种类型的JDBC Driver
1. 桥接ODBC
2. 调用本地的RDBMS接口
3. 调用DBMS的服务
4. 通过网络协议与DBMS交流
JDBC的API:java.sql和javax.sql,其中javax.sql是Java2的扩展功能。
相关的接口和类
Driver
DriverManager
Connetion
Statement
PreparedStatement
CallableStatement
ResultSet
DatabaseMetadata
ResultSetMetadata
Types
第二部分 使用JDBC
使用JDBC的流程
1. 注册一个JDBC驱动(JDBCDriver)
2. 创建一个JDBC连接
3. 创建一个Statement
4. 执行一个SQL
5. 处理返回结果
6. 关闭JDBC连接
1. 注册一个JDBC驱动
JDBC驱动是用来连接数据库的,JDBC的API会加载第一个可以连接的驱动,所以你可以定义多个驱动。
经常使用的JDBC驱动
1. JDBC-ODBC:sun.jdbc.odbc.JdbcOdbcDriver
2. Oracle: oracle.jdbc.driver.OracleDriver
2. 创建一个JDBC连接
1. DriverManager类调用getConnection(urlString)函数
2. 如果驱动返回成功,DriverManager创建一个链接
3. 如果失败,返回null,并检查下一个驱动
经常使用的连接url
1. JDBC-ODBC: jdbc:odbc:<DB>
2. Oracle:
jdbc:oracle:oci:@<SID>
jdbc:oracle:thin:@<SID>
3. 调用getConnection的两种方法
其中getConnection(String url,java.util.Properties info),可以属性写入属性文件里面,用java.util.Properties类来加载。
如:
Class.forName(sDBDriver); Properties properties = new Properties(); FileInputStream fis = new FileInputStream(new File(new URI( "file:///d:/jdbc.properties"))); properties.load(fis); Connection conn = DriverManager.getConnection(sConnStr, properties);
也可以使用驱动直接连接的方法:
Properties properties = new Properties(); FileInputStream fis = new FileInputStream(new File(new URI( "file:///d:/jdbc.properties"))); properties.load(fis); com.microsoft.jdbc.sqlserver.SQLServerDriver driver = new com.microsoft.jdbc.sqlserver.SQLServerDriver(); Connection conn = driver.connect(sConnStr, properties);
这个时候就不需要:Class.forName
3. 创建一个Statement
创建一个Statement对象,通过Connection.createStatement的方法。
在多次进行查询时,PreparedStatement比Statement更有效率。
CallableStatement对象,让你可以使用SQL请求以外的请求,例如存储过程。
4. 执行SQL
执行SQL通过三个方法分别是:
executeQuery(); // 用来查询
executeUpdate(); // 用来更新
execute(); // 用来执行存储过程
5. 处理返回结果
ResultSet会保持当前的游标,最初ResultSet的游标会在第一行之前。
6. 关闭数据库连接
应该按ResultSet,Statement,Connection的顺序把连接关闭
if(rs!=null){ try{ rs.close(); }catch(Exception ex){ ex.printStackTrace(); } } if(ps!=null){ try{ ps.close(); }catch(Exception ex){ ex.printStackTrace(); } } if(conn!=null){ try{ conn.close(); }catch(Exception ex){ ex.printStackTrace(); } }
第三部分:OOAD与数据库设计
每个表的都应该有一个id的属性来标识自己的对象唯一性。一般id应该是数据库里面的主键。可以用IDs对象来表示表里面多重主键的情况。
第四部分 JDBC高级话题
1. 异常
SQLException通常会在下列情况发生:
(1) JDBC与服务器端的联系丢失
(2)你执行了错误的指令
(3)你执行了不被支持的函数
(4)你引用的行不存在