qq_24194029
纯种直男
采纳率20%
2019-07-24 14:46

求解JDBC使用批处理executeBatch()之后commit(),数据库没有变化。

5

Java的JDBC使用批处理executeBatch()之后commit(),数据库没有变化。

代码

public static boolean newProblem_state(List<User_t> auditorlist, Problems_t problems)throws ClassNotFoundException, SQLException {
        KrakenRecord.debug("正在建立关联"+auditorlist.size());
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
        conn.setAutoCommit(false); // 设置手动提交
        String sql = "insert into problemstate_ta (problemstate_problem_id,problemstate_auditor_id,problemstate_state) values("
                + problems.getProblems_id() + ",?,0)";
        PreparedStatement ps = conn.prepareStatement(sql);
        for (User_t user_t : auditorlist) {
            ps.setInt(1, user_t.getUser_id());
            ps.addBatch();// 添加到批次
        }
        int[] i = ps.executeBatch();// 提交批处理
        conn.commit();// 执行
        for (int j : i) {
            System.out.println(j);
        }
        // 关闭资源
        ps.close();
        conn.close();
        return true;
}

以上代码运行后,显示:
正在建立关联4
1
1
1
1
auditorlist的size是4正确,打印的四个1应该是executeBatch()正确执行了,但是数据库没有变化,求解

补充:昨晚发现是插入的数据库没反应,也就是problemstate_ta 这个表,无法插入数据,命令没有写错,在Navicat中窗口模式手动插入数据,数据的自动增长id显示+1,插入数据也没有报错,但是刷新表,数据没了,求解

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • songqiang2011 像忘了谁sq 2年前

    没报错,没插入进去,估计你查错库了或表了。对应一下你的配置文件

    点赞 评论 复制链接分享
  • wojiushiwo945you 毕小宝 2年前

    可能是数据库信息没有傻笑,可以试试数据库关闭下再重新打开,或者数据库刷新一下。

    点赞 1 评论 复制链接分享

为你推荐