前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JDBC】JDBC API 详解 ② ( Connection 数据库连接对象 | 获取 SQL 执行对象 - 普通、预编译 SQL 语句 | 事务管理 | 开启事物 | 提交事物 | 回滚事物 )

【JDBC】JDBC API 详解 ② ( Connection 数据库连接对象 | 获取 SQL 执行对象 - 普通、预编译 SQL 语句 | 事务管理 | 开启事物 | 提交事物 | 回滚事物 )

作者头像
韩曙亮
发布2023-03-25 11:44:13
8980
发布2023-03-25 11:44:13
举报
文章被收录于专栏:韩曙亮的移动开发专栏

一、Connection 数据库连接对象


Connection 数据库连接对象 代表了 Java 应用 与 指定的数据库 的连接会话 , 通过该会话 , 可以执行 SQL 语句 , 并返回 SQL 语句的增删查改的结果 ;

Connection 数据库连接对象 有两个作用 :

  • 获取 SQL 执行对象
  • 管理事物

1、获取 SQL 执行对象

Connection 数据库连接对象 可以 获取 SQL 执行对象 , SQL 执行对象有以下 3 种 :

  • 普通 SQL 执行对象 :
代码语言:javascript
复制
    Statement createStatement() throws SQLException;
  • 预编译 SQL 语句的 SQL 执行对象 : 这种方式执行 SQL 语句 , 可以 防止被 SQL 注入 ;
代码语言:javascript
复制
    PreparedStatement prepareStatement(String sql)
        throws SQLException;
  • 执行存储过程对象 ( 不常用 ) :
代码语言:javascript
复制
    CallableStatement prepareCall(String sql) throws SQLException;

2、事务管理

Connection 数据库连接对象 事务管理 :

  • 开启事物 : autoCommit 参数为 true 自动提交事物 , false 手动提交事物 ;
代码语言:javascript
复制
	void setAutoCommit(boolean autoCommit) throws SQLException;
  • 提交事物 :
代码语言:javascript
复制
    void commit() throws SQLException;
  • 回滚事物 :
代码语言:javascript
复制
    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();
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Connection 数据库连接对象
    • 1、获取 SQL 执行对象
      • 2、事务管理
        • 3、事务管理代码示例
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档