JDBC、Result封装list、 JDBC事务

本文详细介绍了如何使用JDBC进行数据库连接,包括预编译语句执行SQL和事务处理,如开启、提交和回滚。重点展示了如何封装Resultset为List以及事务控制的实战示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本使用方

1.创建连接

// 创建一个数据库连接
Connection conn = null;

// 创建预编译语句对象
PreparedStatement pstm = null;
// 创建一个结果集对象
ResultSet rs = null;
//SQL语句
String sql = "";

cityConn = DBUtil.getConn(userName,passWord,url,driverClass)
String orclDriverClass = "oracle.jdbc.OracleDriver";
String dmDriverClass = "dm.jdbc.DmDriver";

2.处理sql

// 创建预编译语句对象
pstm = cityConn.prepareStatement(Sql);
rs = pstm.executeQuery();
while (rs.next()) {
    xkCount = rs.getInt("COUNT");
}

3.使用完后记得关闭连接

conn.close;
pstm.close;
rs.close;

4.基本方法:

1. close(), 关闭该数据库连接

2. commit(), 提交所有更改内容并释放该Connection对象锁定的资源

3. createStatement(), 基于本Connection对象,创建Statement对象

4. getAutoCommit(), 获取当前是否是自动提交模式

5. getMetaData(), 获取本连接相关的数据库元数据

6. isClosed(), 返回当前连接对象是否已经被关闭

7. preparedStatement(), 基于本连接对象,创建PreparedStatement对象

8. rollback(), 取消本轮事务中前面已经提交的更改

9. setAutoCommmit(), 设置是否自动提交

Connection 对象的主要作用是打开与数据源的连接。

二、处理数据相关

1.Result结果集封装成list

List list = new ArrayList();

pstm = cityConn.prepareStatement(sql);
rs = pstm.executeQuery();
ResultSetMetaData md = rs.getMetaData();//获取键名
int columnCount = md.getColumnCount();//获取行的数量
while (rs.next()) {
	Map rowData = new HashMap();//声明Map
	for (int i = 1; i <= columnCount; i++) {
		rowData.put(md.getColumnName(i), rs.getObject(i));//获取键名及值
	errorData_wsh = rs.getString("XK_WSH");
	}
	list.add(rowData.get("XK_WSH"));
}

2.管理事务

(1)开启事务setAutoCommit

调用该方法设置参数为false,即开启事务。

在执行sql之前开启事务。

(2)提交事务:commit()

当所有sql都执行完提交事务。

(3)回滚事务:rollback()

在catch中回滚事务。

public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstmt1 = null;
        PreparedStatement pstmt2 = null;
        try {
            //1.获取连接
            conn = JDBCUtils.getConnection();
            //开启事务
            conn.setAutoCommit(false);
            //2.定义sql
            //2.1 张三 - 500
            String sql1 = "update account set balance = balance - ? where id = ?";
            //2.2 李四 + 500
            String sql2 = "update account set balance = balance + ? where id = ?";
            //3.获取执行sql对象
            pstmt1 = conn.prepareStatement(sql1);
            pstmt2 = conn.prepareStatement(sql2);
            //4. 设置参数
            pstmt1.setDouble(1,500);
            pstmt1.setInt(2,1);
            pstmt2.setDouble(1,500);
            pstmt2.setInt(2,2);
            //5.执行sql
            pstmt1.executeUpdate();
            // 手动制造异常
            int i = 3/0;
            pstmt2.executeUpdate();
            //提交事务
            conn.commit();
        } catch (Exception e) {
            //事务回滚
            try {
                if(conn != null) {
                    conn.rollback();
                }
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally {
              //关闭资源
            JDBCUtils.close(pstmt1,conn);
            JDBCUtils.close(pstmt2,null);
        }

参考:JDBC系列:(7)使用Connection操作事务 - 行业资讯 - 亿速云

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值