我希望程序能够精确地将数据放入 Jtable 中,而不弄乱我的 sql 数据库。
Jtable 结构只有 NAME、USERNAME、EMAIL、PASS、GENDER 和 STATUS。
我的sql数据库表结构是姓氏,名字,中间名,用户名,密码,电子邮件,性别,生日,地址,状态。表中记录的数据是不按顺序的,并且添加到 jtable 中的方式也是不按顺序的。
此外,当我的数据显示在 jtable 中时,姓氏和名字也会合并。 (间距问题)。
[这就是发生的事情) (https://i.sstatic.net/VC4FAU7t.png))
代码:
DefaultTableModel tabolmodel =
(DefaultTableModel) jTable4.getModel(); // add string array basta yon
if (tabolmodel.getRowCount() == 0) {
JOptionPane.showMessageDialog(this, "Table is Empty.");
} else {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
java.sql.Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/shsgrading?useSSL=false", "root", "");
for (int i = 0; i < tabolmodel.getRowCount(); i++) {
String NAME = (String) tabolmodel.getValueAt(i, 0);
String USERNAME = (String) tabolmodel.getValueAt(i, 1);
String EMAIL = (String) tabolmodel.getValueAt(i, 2);
String PASS = (String) tabolmodel.getValueAt(i, 3);
String GENDER = (String) tabolmodel.getValueAt(i, 4);
String STATUS = (String) tabolmodel.getValueAt(i, 5);
String lastName = txtLname.getText();
String firstName = txtFname.getText();
if (NAME.contains(", ")) {
String[] names = NAME.split(", ", 2);
lastName = names[0].trim();
firstName = names[1].trim();
} else {
firstName = NAME;
}
String middleName = txtMname.getText();
String address = txt_address.getText();
java.sql.Date sqlStartDate = null;
java.util.Date utilStartDate = date_birthday.getDate();
String status = "Inactive";
int statusMaxSize = 30;
if (status.length() > statusMaxSize) {
status = status.substring(0, statusMaxSize);
}
String query =
"INSERT INTO instructor(lastName, firstName, middleName, username, password, email, gender, birthday, address, status) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement prepstmt = con.prepareStatement(query);
prepstmt.setString(1, lastName);
prepstmt.setString(2, firstName);
prepstmt.setString(3, middleName);
prepstmt.setString(4, USERNAME);
prepstmt.setString(5, PASS);
prepstmt.setString(6, EMAIL);
prepstmt.setString(7, GENDER);
if (sqlStartDate != null) {
prepstmt.setDate(8, sqlStartDate);
} else {
prepstmt.setDate(8, new java.sql.Date(new java.util.Date().getTime()));
}
prepstmt.setString(9, address);
if (STATUS != null && !STATUS.isEmpty()) {
prepstmt.setString(10, STATUS);
} else {
prepstmt.setString(10, status);
}
prepstmt.executeUpdate();
prepstmt.close();
}
JOptionPane.showMessageDialog(this, "Data inserted successfully.");
tabolmodel.setRowCount(0);
con.close();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "An error occurred: " + e.getMessage());
}
}
A
JTable
委托给几个模型。最重要的是TableModel
。这包含数据,并且应该包含所有列。
第二个型号是
TableColumnModel
。这决定了 UI 中实际显示哪些列。它具有添加、移动和删除列的方法。您可以使用它来删除您不想显示的列。
还有第三种型号,
ListSelectionModel
。这决定了选择哪些行或单独的单元格。
通过在 UI 中移动列和行排序等功能,
JTable
有一些方法可以在 UI 和 TableModel
之间进行映射。例如, convertColumnIndexToModel
从 UI 列索引转换为匹配模型索引,而 convertColumnIndexToView
则相反。