mumei2018 发表于 2024-1-1 20:59:58

JDBC代码执行后数据库里的表格没有发生任何变化 代码无报错 请问问题出在哪里

代码如下

package com.itheima.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

/**
* JDBC快速入门
*/
public class JDBCDemo_Connection {

    public static void main(String[] args) throws Exception {
      //1. 注册驱动
      Class.forName("com.mysql.cj.jdbc.Driver");
      //2. 获取连接
      String url = "jdbc:mysql:///db1";
      String username = "root";
      String password = "root";
      Connection conn = DriverManager.getConnection(url, username, password);
      //3. 定义sql
      String sql1 = "update users set money = 3210 where id = 2";
      String sql2 = "update users set money = 1500 where id = 1";
      //4. 获取执行sql的对象 Statement
      Statement stmt = conn.createStatement();
      //5. 执行sql
      try {
              conn.setAutoCommit(false);
                        int count1 = stmt.executeUpdate(sql1);//受影响的行数
                        System.out.println(count1);
                        int count2 = stmt.executeUpdate(sql2);//受影响的行数
                        System.out.println(count2);
                } catch (Exception throwables) {
                        conn.rollback();
                        throwables.printStackTrace();// TODO: handle exception
                }

      //6. 处理结果
      //System.out.println(count1 + count2);
      //7. 释放资源
      stmt.close();
      conn.close();
    }
}

想用这段代码改变表格里字段money的数值加上try/catch前 可以成功执行并改变数据 但是加上try/catch后 依然可以成功执行 并打印被影响的行数 只是数据库里的表格没有发生任何变化 是我的代码有问题吗? 谢谢万能的小助手。

FishC 发表于 2024-1-1 21:00:18

你的代码逻辑上是正确的。执行了更新操作后,数据库中对应的表格应该发生变化。但是在你的代码中,缺少了提交事务的步骤。当你将连接的自动提交设置为false时,需要手动调用commit()方法来提交事务。

你可以将以下代码片段添加到你的代码中,来进行事务的提交:
//8. 提交事务
conn.commit();
在catch语句块中,你已经添加了回滚事务的逻辑,可以保证事务失败时能够回滚更新。但是在事务成功时,你需要手动提交事务才能使得数据库中对应的表格发生变化。

希望这个解答对你有帮助!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: JDBC代码执行后数据库里的表格没有发生任何变化 代码无报错 请问问题出在哪里