JDBC教程
目标:
设计多层数据库应用架构
用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)你引用的行不存在
?
?
?