Connection数据库连接对象
功能:
1.获取执行sql的对象
Statement st = con.createStatement(String sql);
PreparedStatement pst = con.prepareStatement(String sql);
2.管理事务
con.setAutoCommit(false); / 开启事务(设置参数为false)
※在执行sql语句之前开启事务
con.commit(); / 提交事务
※在所有sql语句执行完后提交事务
con.rollback(); / 回滚事务
※在catch块里回滚事务,还应该注意两点,一是要把捕捉的异常范围扩大,更改为Exception e;二是在con.rollback()之前先判断下con是否为空
[案例]
江给河转1024块钱,江的账户减少1024,河的账户增加1024,这两步操作必须作为一个事务整体,要么同时成功,要么同时失败
package jdbc;
import java.sql.*;
public class JDBC {
public static void main(String[] args) {
/ 1.导入Oracle驱动jar包(将ojdbc6.jar放在web/lib文件夹下)
Connection con = null;
PreparedStatement pst1 = null;
PreparedStatement pst2 = null;
try {
/ 2.注册驱动
Class.forName("oracle.jdbc.OracleDriver");
/ 3.获取数据库连接对象(Connection)
con = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl", / 数据库地址
"system", / 数据库用户名
"root" / 数据库密码
);
/ 开启事务
con.setAutoCommit(false);
/ 4.定义SQL语句
String sql1 = "UPDATE table_emp SET salary = salary - ? WHERE name = '江'";
String sql2 = "UPDATE table_emp SET salary = salary + ? WHERE name = '河'";
/ 5.获取执行SQL语句的对象(PreparedStatement)
pst1 = con.prepareStatement(sql1);
pst2 = con.prepareStatement(sql2);
pst1.setInt(1,1024);
pst2.setInt(1,1024);
/ 手动制造异常来测试JDBC的管理事务(java.lang.ArithmeticException: / by zero)
int i = 3/0;
/ 6.执行SQL语句
pst1.executeUpdate();
pst2.executeUpdate();
/ 提交事务
con.commit();
/ 此时把要捕捉的异常更改为Exception e
} catch (Exception e) {
try {
if (con != null) {
/ 回滚事务
con.rollback();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
e.printStackTrace();
} finally {
/ 8.关闭资源
if (pst1 != null) {
try {
pst1.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (pst2 != null) {
try {
pst2.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
}
我寻见一片海 碧蓝且耀着光
大片船只航行其上 都向着远方
Shared by Foriver_江河