java - 如何根据相应的行将jTable值插入数据库?
问题描述
我的图形用户界面:
我的数据库结构
我想将 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());
}
}
解决方案
您应该转义字符串,然后根据您的代码获取 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);
我希望这会对你有所帮助
推荐阅读
- mysql - 无法使用 docker-compose 创建准备好的 MySql DB
- flutter - 如何在 Flutter 中使用 Firebase 查询对象列表
- html - document.getElementsByName 返回未定义
- html - HTML5 三列布局,左/中可调整大小,右固定
- mysql - 用 2 个没有加入的表进行分组
- c# - 如何在 XAML 中访问 IEnumerable 的子属性?
- amazon-web-services - 让我们在 AWS Elastic Beanstalk 上加密
- deployment - Eclipse 中的 Maven + Tomcat。Tomcat 返回错误 405
- javascript - 如何在js中打印DD/MM/YYYY
- sql - 使用 Oracle PL/SQL 定位历史记录