Java 无法基于搜索生成更新的JTable
当我在搜索按钮中输入一个人的名字时,我发现很难更新Java 无法基于搜索生成更新的JTable,java,mysql,swing,jtable,awt,Java,Mysql,Swing,Jtable,Awt,当我在搜索按钮中输入一个人的名字时,我发现很难更新JTable。程序正确编译,没有任何错误,但在SearchActionPerformed事件中,当按下搜索按钮时,出现一个空表。在没有搜索的情况下,表中充满了来自数据库的值。在搜索条件中,我键入的姓氏与数据库中的姓氏完全相同,但没有返回 public class MainMenu extends javax.swing.JFrame { Academic ac = new Academic(); Connection conn
JTable
。程序正确编译,没有任何错误,但在SearchActionPerformed
事件中,当按下搜索按钮时,出现一个空表。在没有搜索的情况下,表中充满了来自数据库的值。在搜索条件中,我键入的姓氏与数据库中的姓氏完全相同,但没有返回
public class MainMenu extends javax.swing.JFrame {
Academic ac = new Academic();
Connection conn = JavaConnect.ConnectDB();
PreparedStatement pst = null;
String sql;
ResultSet rs = null;
ImageIcon format = null;
public byte[] imagedata = null;
/**
* Creates new form MainMenu
*/
public MainMenu() {
initComponents();
}
public void Update_table(String sql) {
try {
// String sqlStatement =
// "SELECT Title, Forename, Surname, Role FROM AcademicInfo ";
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
table_academic.setModel(DbUtils.resultSetToTableModel(rs));
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
finally {
try {
rs.close();
pst.close();
} catch (Exception e) {
}
}
}// end method
private void table_academicMouseClicked(java.awt.event.MouseEvent evt) {
try {
int row = table_academic.getSelectedRow();
String table_click0 = (table_academic.getModel().getValueAt(row, 1)
.toString());
String table_click1 = (table_academic.getModel().getValueAt(row, 2)
.toString());
String sqlSt = "SELECT * FROM AcademicInfo WHERE Forename='"
+ table_click0 + "' AND Surname='" + table_click1 + "'";
Connection conn2 = JavaConnect.ConnectDB();
pst = conn2.prepareStatement(sqlSt);
rs = pst.executeQuery();
if (rs.next()) {
label_name.setText("" + rs.getString(2) + " " + rs.getString(3)
+ " " + rs.getString(4));
label_role.setText("" + rs.getString(5));
label_room.setText("Room: " + rs.getString(6));
jLabel14.setText("Page: " + rs.getString(7));
label_hours.setText("Hours: " + rs.getString(8));
label_phone.setText("Phone: " + rs.getString(9));
label_mobile.setText("Mobile: " + rs.getString(10));
label_email.setText("Email: " + rs.getString(11));
imagedata = (rs.getBytes(12));
format = new ImageIcon(imagedata);
label_image.setIcon(format);
}
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
} finally {
try {
rs.close();
pst.close();
} catch (Exception e) {
}
}
}
private void SearchActionPerformed(java.awt.event.ActionEvent evt) {
try {
String sql = "SELECT Title, Forename, Surname, Role FROM AcademicInfo WHERE Surname=?";
PreparedStatement pst1 = conn.prepareStatement(sql);
pst1.setString(1, search_txt.getText());
ResultSet rs2 = pst1.executeQuery();
if (rs2.next()) {
JOptionPane.showMessageDialog(null, "Found Academic");
Update_table(sql);
} else {
JOptionPane.showMessageDialog(null, "No Results Found");
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
}
检查此方法是否适用于您:@Chandana我不希望对代码进行太多修改,而是尝试重用现有的
Update\u table()
method设置新模型将更新表,因此您的问题在于构建新模型。我建议执行以下操作以验证查询是否符合预期:(1)记录传递到查询构建代码中的参数,(2)在处理结果集时记录每一行,以及(3)创建一个只使用已知参数执行查询的自包含测试程序,这并不涉及Swing。作为一般性的评论:我将假设这只是一个学习练习,而不是用于生产。但是,(1)使用SwingWorker
而不是直接从Swing事件线程执行查询(因为后者会锁定GUI)仍然是一个好习惯,(2)使用PreparedStatement
而不是带有文字查询词的语句
(因为后者会让您面临SQL注入攻击)@parsifal我不明白你所说的日志是什么意思,你能用一个例子解释一下吗?我尝试了一个测试,当我在SQL语句中指定姓氏而不是?时,它可以正常工作。因此,实际上它可以将SQL值传递给update_table()。可能是由于连接被打开而造成的混乱。我不敢肯定