本文章为看Java学习视频的学习笔记,供自己以后参考学习。JDBC为Java提供的唯一一个和各个数据库进行交互的接口库。
JDBC编程步骤
JDBC的编程步骤比较固定,核心步骤如下:
- Load the Driver,即加载驱动
创建Driver的方法有下面几种:
Class.forName() | Class.forName().newInstance() | new DriverName()
在实例化时自动向DriverManager
注册,因此不需要显式调用DriverManager.registerDriver
方法。 - Connect to the Database,即连接数据库
方法为DriverManager.getConnection()
- Execute the SQL,执行SQL语句
Connection.CreateStatement()
Statement.executeQuery()
Statement.executeUpdate()
- Retrieve the result data,获取查询结果
循环取得结果:while (rs.next())
- Show the result data,显示结果数据
将数据库中的各种类型转换为Java中的类型(getXXX)方法 - Close,关闭
close theresultset
,close thestatement
,close theconnection
JDBC程序示例
下面为较为规范的程序示例,需要注意以下几点:
- 应该使用
try...catch...
捕获异常,最好不要用throws
抛出异常。 - 将
rs
关闭后要置空,以便于垃圾回收器将占用的内存回收。
示例代码如下:
public class Test {
public static void main(String[] args) {
ResultSet rs = null;
Statement stmt = null;
Connection conn = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT", "scott", "tiger");
stmt = conn.createStatement();
rs = stmt.executeQuery("select * form dept");
while(rs.next()){
System.out.println(rs.getString("deptno"));
System.out.println(rs.getInt("deptno"));
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(rs != null){
rs.close();
rs = null;
}
if(stmt != null){
stmt.close();
stmt = null;
}
if(conn != null){
conn.close();
conn = null;
}
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
JDBC进阶
- 指定SQL语句中的变量,
PreparedStatement
由于原始SQL语句繁琐,平时应多使用这种语句。 是一种特殊的Statement
- 对存储过程进行调用,
CallableStatement
CallableStatement cstmt = conn.prepareCall("{call p(?, ?, ?, ?)}");
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
cstmt.setInt(1, 3);
cstmt.setInt(2, 4);
cstmt.setInt(4, 5);
cstmt.execute();
System.out.println(cstmt.getInt(3));
System.out.println(cstmt.getInt(4));
cstmt.close();
conn.close();
- 批处理
ps.addBatch();
ps.executeBatch();
JDBC处理事务(Transaction)
处理步骤:
- 将自动提交设为
false
conn.setAutoCommit(false)
- 处理相关逻辑
- 手动提交
conn.commit()
- 将自动提交设为
true
conn.setAutoCommit(true)
- 如果捕获到任何的
SQLException
,则rollback
主要代码片段:
try{
conn.setAutoCommit(false);
//处理相关逻辑
conn.commit()
conn.setAutoCommit(true);
} catch(SQLException e) {
e.printStackTrace();
try {
if(conn!=null)
{
conn.rollback();
conn.setAutoCommit(true);
}
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally{
//codes
}