java - Java 中的 addBatch() 执行

标签 java jdbc

下面代码的问题是,假设如果 requests[] 数组中的特定查询包含错误,则语句查询将执行,并且将抛出带有错误的查询的异常,我希望这两个查询都被如果两个查询都没有错误则执行,否则不应执行任何查询,我应该对下面的代码执行什么操作才能获得所需的结果?请帮忙。

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        int rw = jTable1.getRowCount();
        int col = jTable1.getColumnCount();
        System.out.println("RC" + rw);
        System.out.println("Col" + col);
        String queries[] = new String[rw];
        Object o[][] = new Object[rw][col];
        String poid = jComboBox10.getSelectedItem().toString();
        java.sql.Date xdate = null;
        Connection con=null;
        Statement st=null;
       String cc = ims.MainWindow.cc;
        try {
            for (int i = 0; i < rw; i++) {
                for (int j = 0; j < col; j++) {
                    o[i][j] = jTable1.getValueAt(i, j);
                    System.out.println("imj" + i + "," + j + "=" + o[i][j]);
                }
                if (String.valueOf(o[i][5]) == "") {
                    xdate=null;
                }
                else {
                                        xdate = new java.sql.Date(df.parse(String.valueOf(o[i][5])).getTime());

                }
                queries[i] = "insert into po_items values('" + poid + "','" + cc + "','" + o[i][1] + "'," + o[i][2] + "," + o[i][4] + ",'" + xdate + "','" + o[i][7] + "'," + o[i][8] + ")";
            }

            for (int k = 0; k < rw; k++) {
                System.out.println(queries[k]);
            }
            String query = "insert into tablex values('xx','yy')";
            con=CPool.getConnection();
            st=con.createStatement();
                con.setAutoCommit(false);
                for(int l=0;l<rw;l++)
                {
                    st.addBatch(queries[l]);
                }
                st.addBatch(query);
                st.executeBatch();
                con.commit();
            System.out.println(query);
        } catch (Exception x) {
            System.out.println(x.getMessage());
        }
        finally {
              CPool.closeConnection(con);
              CPool.closeStatement(st);
        }

    }         

最佳答案

除非您执行/触发查询,否则您不会知道查询是否会出错。

但是,您可以做的是将查询分组到数据库事务中,如果一切正常则进行提交,如果任何查询失败则进行回滚。您可以使用 try catch block 来实现此目的(在异常时回滚;否则提交)。

关于java - Java 中的 addBatch() 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14375075/

相关文章:

java - 在swing中拖动对象,MouseMotionListener是在对象中还是在JPanel中?

java - 我们可以在代码中不使用 Webdriver 接口(interface)的情况下运行 selenium 测试吗?

java - 我如何在 java 中使用 swing 在 jeditorpane 中的超链接上添加悬停效果

java - 功能模块的数据绑定(bind)错误

java - 从简单但大的数据(人口普查)创建许多表格和图表的策略

sql-server - 安装和使用 MS SQL JDBC 驱动程序?

java - 如果类/接口(interface)具有 val 属性或具有泛型类型的函数,为什么类/接口(interface)不能以 out 作为前缀?

java - 在 WebSphere 7 中指定 SQL Server 实例名称

java - 在 Debug模式下,我可以看到额外的数组列表元素并初始化为零

postgresql - 无法连接到 PostgreSQL