鱼C论坛

 找回密码
 立即注册
查看: 221|回复: 1

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

[复制链接]
发表于 2024-1-1 20:59:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下

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后 依然可以成功执行 并打印被影响的行数 只是数据库里的表格没有发生任何变化 是我的代码有问题吗? 谢谢万能的小助手。
最佳答案
2024-1-1 21:00:18
你的代码逻辑上是正确的。执行了更新操作后,数据库中对应的表格应该发生变化。但是在你的代码中,缺少了提交事务的步骤。当你将连接的自动提交设置为false时,需要手动调用commit()方法来提交事务。

你可以将以下代码片段添加到你的代码中,来进行事务的提交:
  1. //8. 提交事务
  2. conn.commit();
复制代码

在catch语句块中,你已经添加了回滚事务的逻辑,可以保证事务失败时能够回滚更新。但是在事务成功时,你需要手动提交事务才能使得数据库中对应的表格发生变化。

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-1 21:00:18 | 显示全部楼层    本楼为最佳答案   
你的代码逻辑上是正确的。执行了更新操作后,数据库中对应的表格应该发生变化。但是在你的代码中,缺少了提交事务的步骤。当你将连接的自动提交设置为false时,需要手动调用commit()方法来提交事务。

你可以将以下代码片段添加到你的代码中,来进行事务的提交:
  1. //8. 提交事务
  2. conn.commit();
复制代码

在catch语句块中,你已经添加了回滚事务的逻辑,可以保证事务失败时能够回滚更新。但是在事务成功时,你需要手动提交事务才能使得数据库中对应的表格发生变化。

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 15:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表