我设法获得了一个能够过滤数据库中记录的代码,在我的jtable..here中显示的结果如下所示:
try{
TableRowSorter<TableModel> sorter = new TableRowSorter<>(((DefaultTableModel)myTable.getModel()));
sorter.setRowFilter(RowFilter.regexFilter(JTextField.getText()));
myTable.setRowSorter(sorter);
}catch(Exception e){
e.getMessage();
} 问题是,当我单击已搜索的选定行记录时,无法将其数据输入所需的文本字段。
table_click的方法如下:
try{
int row = myTable.getSelectedRow();
String table_click=(myTable.getModel().getValueAt(row,0).toString());
String sgl="select * from employees where Name='"+table_click+"'";
pst=conn.prepareStatement(sgl);
rs=pst.executeQuery();
if(rs.next()){
String a = rs.getString("Name");
JTextField.setText(a);
}
}catch(SQLException | NumberFormatException e){
e.getMessage();
}finally{
try{
rs.close();
pst.close();
}
catch(Exception e){
}
}这样做的目的是只选择数据库中第一行的记录,而不是搜索的记录。
当我使用TableRowSorter和rowFilter时,如何单击我的TableRowSorter和rowFilter只选择我搜索过的记录,而不是数据库中的第一条记录?谢谢。
发布于 2018-05-10 16:08:37
尝尝这个,
如果只希望在textfield中显示名称,则不要再次对其运行查询。第一次打印字符串table_click一次,以确保它具有所需的值,如果有,则只需
JTextField.setText(table_click); 如果您出于某种原因特别希望从数据库中完成此操作,那么首先打印String table_click以确保它得到了所需的值,还确保数据库中没有多个名称相同的记录。如果所有这些都是正确的,那么尝试用传统的方式编写PreparedStatement。
pst = conn.PrepareStatement("select * from employees where Name = ?;");
pst.setString(1,table_click);
pst.executeQuery();
if (!rs.isBeforeFirst()) {
System.out.println("Empty ResultSet");
}
else{
JTextField.setText(rs.getString("Name"));
}https://stackoverflow.com/questions/48686847
复制相似问题