一、Connection 数据库连接对象
Connection 数据库连接对象 代表了 Java 应用 与 指定的数据库 的连接会话 , 通过该会话 , 可以执行 SQL 语句 , 并返回 SQL 语句的增删查改的结果 ;
Connection 数据库连接对象 有两个作用 :
- 获取 SQL 执行对象
- 管理事物
1、获取 SQL 执行对象
Connection 数据库连接对象 可以 获取 SQL 执行对象 , SQL 执行对象有以下 3 种 :
- 普通 SQL 执行对象 :
Statement createStatement() throws SQLException;
- 预编译 SQL 语句的 SQL 执行对象 : 这种方式执行 SQL 语句 , 可以 防止被 SQL 注入 ;
PreparedStatement prepareStatement(String sql)
throws SQLException;
- 执行存储过程对象 ( 不常用 ) :
CallableStatement prepareCall(String sql) throws SQLException;
2、事务管理
Connection 数据库连接对象 事务管理 :
- 开启事物 : autoCommit 参数为 true 自动提交事物 , false 手动提交事物 ;
void setAutoCommit(boolean autoCommit) throws SQLException;
- 提交事物 :
void commit() throws SQLException;
- 回滚事物 :
void rollback() throws SQLException;
3、事务管理代码示例
在下面的代码中 ,
首先 , 先 获取 Connection 数据库连接对象 ;
代码语言:javascript复制conn = DriverManager.getConnection(url, username, password);
然后 , 设置手动提交事物 ;
代码语言:javascript复制conn.setAutoCommit(false); // 设置手动提交事务
再后 , 获取 预编译 SQL 语句的 SQL 执行对象 , 设置预编译的 SQL 语句 ;
代码语言:javascript复制pstmt = conn.prepareStatement("UPDATE account SET balance = balance - 100 WHERE user_id = ?");
最后 , 提交事物 ;
代码语言:javascript复制conn.commit(); // 提交事务
此外 , 如果执行事物过程出现异常 , 则回滚事物 ;
代码语言:javascript复制conn.rollback(); // 回滚事务
完整代码示例 :
代码语言:javascript复制Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DriverManager.getConnection(url, username, password);
conn.setAutoCommit(false); // 设置手动提交事务
pstmt = conn.prepareStatement("UPDATE account SET balance = balance - 100 WHERE user_id = ?");
pstmt.setInt(1, 1);
pstmt.executeUpdate();
pstmt.setInt(1, 2);
pstmt.executeUpdate();
conn.commit(); // 提交事务
} catch (SQLException e) {
if (conn != null) {
try {
conn.rollback(); // 回滚事务
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}