首页 > 解决方案 > 如何根据相应的行将jTable值插入数据库?

问题描述

我的图形用户界面: 这是我的 GUI 框架

我的数据库结构 这是我的数据库

我想将 Jtable 值传递到数据库中。我已经从后端插入了两列的值。用户应填写其他数据。我想根据相关代号将数据从Jtable传递到数据库。jTable的st_code等于“FOT”的行应该传入st_code等于“FOT”的数据库行。

这是我的代码;

   private void submit_kniActionPerformed(java.awt.event.ActionEvent evt) {                                           

        try {

            int rows = table_kni.getRowCount();
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/odemetrics", "root", "");
            conn.setAutoCommit(false);

            String sql = "INSERT INTO `trinco_line` (stname,stcode,bookedtkt,returnedtkt,firstcls_KNI,secondcls_KNI,thirdclsA_KNI,thirdclsB_KNI,thirdclsC_KNI,total_KNI) values (?,?,?,?,?,?,?,?,?,?) where stcode = table_kni.getValueAt(row, 0)";

            PreparedStatement pst = conn.prepareStatement(sql);

            for (int row = 0; row < rows; row++) {
                String code = (String) table_kni.getValueAt(row, 0);
                String name = (String) table_kni.getValueAt(row, 1);
                int cls_1 = Integer.parseInt(table_kni.getValueAt(row, 2).toString());
                int cls_2 = Integer.parseInt(table_kni.getValueAt(row, 3).toString());
                int cls_3a = Integer.parseInt(table_kni.getValueAt(row, 4).toString());
                int cls_3b = Integer.parseInt(table_kni.getValueAt(row, 5).toString());
                int cls_3c = Integer.parseInt(table_kni.getValueAt(row, 6).toString());
                int ttl = cls_1 + cls_2 + cls_3a + cls_3b + cls_3c;

                pst.setString(1, code);
                pst.setString(2, name);
                pst.setInt(3, Integer.parseInt(bookedtkt_kni.getText()));
                pst.setInt(4, Integer.parseInt(returnedtkt_kni.getText()));
                pst.setInt(5, cls_1);
                pst.setInt(6, cls_2);
                pst.setInt(7, cls_3a);
                pst.setInt(8, cls_3b);
                pst.setInt(9, cls_3c);
                pst.setInt(10, ttl);

                pst.addBatch();
            }
            pst.executeBatch();
            conn.commit();
            JOptionPane.showMessageDialog(null, "successfull!");
            conn.close();
            bookedtkt_kni.setText(null);
            returnedtkt_kni.setText(null);
            clearTable();

        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e.getMessage());
        }


    }                                          

标签: javamysql

解决方案


您应该转义字符串,然后根据您的代码获取 jtbable (table_kni) 的值,这应该是:

        String sql = "UPDATE `trinco_line` SET `stname` = \'?\', `stcode` = \'?\', `bookedtkt` = ?, `returnedtkt` = ?, `firstcls_KNI` = ?, `secondcls_KNI` = ?, `thirdclsA_KNI` = ?, `thirdclsB_KNI` = ?, `thirdclsC_KNI` = ?, `total_KNI` = ? where `stcode` = \'?\'";

        PreparedStatement pst = conn.prepareStatement(sql);

        for (int row = 0; row < rows; row++) {
            String code = (String) table_kni.getValueAt(row, 0);
            String name = (String) table_kni.getValueAt(row, 1);
            int cls_1 = Integer.parseInt(table_kni.getValueAt(row, 2).toString());
            int cls_2 = Integer.parseInt(table_kni.getValueAt(row, 3).toString());
            int cls_3a = Integer.parseInt(table_kni.getValueAt(row, 4).toString());
            int cls_3b = Integer.parseInt(table_kni.getValueAt(row, 5).toString());
            int cls_3c = Integer.parseInt(table_kni.getValueAt(row, 6).toString());
            int ttl = cls_1 + cls_2 + cls_3a + cls_3b + cls_3c;
            
            pst.setString(1, code);
            pst.setString(2, name);
            pst.setInt(3, Integer.parseInt(bookedtkt_kni.getText()));
            pst.setInt(4, Integer.parseInt(returnedtkt_kni.getText()));
            pst.setInt(5, cls_1);
            pst.setInt(6, cls_2);
            pst.setInt(7, cls_3a);
            pst.setInt(8, cls_3b);
            pst.setInt(9, cls_3c);
            pst.setInt(10, ttl);
            pst.setString(11, code);

我希望这会对你有所帮助


推荐阅读