Table 当我按字符串过滤时不显示所有数据
Table doesn't show all data when i filter by a string
如果我过滤的 id 不在我创建的 table 模型中,我想获得一个消息对话框。问题是代码在没有 if
的情况下工作正常,但是当我为 messageDialog 条件添加 if
时,我意识到数据已找到但未显示。
比较:
代码:
public void buscarNumeroSerie (String nserie)
{
try {
String [] campos={"NUMERO_SERIE","MARCA","GAVETA"};
String filtroNS = nserie;
String NSSQL = "SELECT NUMERO_SERIE,MARCA,GAVETA FROM"
+ "(SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_wd "
+ "UNION "
+ "SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_toshiba "
+ "UNION "
+ "SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_seagate "
+ "UNION "
+ "SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_samsung "
+ "UNION "
+ "SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_hitachi )"
+ "AS TROUBLE WHERE NUMERO_SERIE LIKE '%"+filtroNS+"%'";
System.out.println(NSSQL);
nsconn = metodosPool.dataSource.getConnection();
ModeloTablaLista = new DefaultTableModel(null, campos);
stmnt = nsconn.prepareStatement(NSSQL);
ResultSet nsrs = stmnt.executeQuery(NSSQL);
if(nsrs.next()== true){
String [] nsfila = new String[3];
while (nsrs.next())
{
nsfila[0]=nsrs.getString("Numero_Serie");
nsfila[1]=nsrs.getString("Marca");
nsfila[2]=nsrs.getString("Gaveta");
ModeloTablaLista.addRow(nsfila);
}
nsrs.close();
stmnt.close();
tablaDiscosGaveta.setModel(ModeloTablaLista);
}
else
{
System.err.println("No existen datos asociados");
JOptionPane.showMessageDialog(rootPane, "Disco no encontrado, quiere:");
}
我的想法是,包含 if
位代码的左图显示了我需要的结果,就像右图一样。我已经尝试使用 for
循环,添加一个新的结果集并更改 if
条件的位置,但没有结果。
nsrs.next()
移动到 ResultSet
中的下一条记录,所以
if(nsrs.next()== true){
String [] nsfila = new String[3];
移动到第一条记录。
然后
while (nsrs.next()) {
移动到第二条记录,跳过第一条记录。因此代码需要在移动到下一条记录之前处理该记录。这是一种不同的方法:
//if(nsrs.next()== true){
// String [] nsfila = new String[3];
String [] nsfila = null;
while (nsrs.next()) {
nsfila = new String[3];
nsfila[0]=nsrs.getString("Numero_Serie");
nsfila[1]=nsrs.getString("Marca");
nsfila[2]=nsrs.getString("Gaveta");
ModeloTablaLista.addRow(nsfila);
}
if (nsfila == null) {
// no data...
}
另请参阅:尝试使用资源,或在 finally 块中 close()
。
如果我过滤的 id 不在我创建的 table 模型中,我想获得一个消息对话框。问题是代码在没有 if
的情况下工作正常,但是当我为 messageDialog 条件添加 if
时,我意识到数据已找到但未显示。
比较:
代码:
public void buscarNumeroSerie (String nserie)
{
try {
String [] campos={"NUMERO_SERIE","MARCA","GAVETA"};
String filtroNS = nserie;
String NSSQL = "SELECT NUMERO_SERIE,MARCA,GAVETA FROM"
+ "(SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_wd "
+ "UNION "
+ "SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_toshiba "
+ "UNION "
+ "SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_seagate "
+ "UNION "
+ "SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_samsung "
+ "UNION "
+ "SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_hitachi )"
+ "AS TROUBLE WHERE NUMERO_SERIE LIKE '%"+filtroNS+"%'";
System.out.println(NSSQL);
nsconn = metodosPool.dataSource.getConnection();
ModeloTablaLista = new DefaultTableModel(null, campos);
stmnt = nsconn.prepareStatement(NSSQL);
ResultSet nsrs = stmnt.executeQuery(NSSQL);
if(nsrs.next()== true){
String [] nsfila = new String[3];
while (nsrs.next())
{
nsfila[0]=nsrs.getString("Numero_Serie");
nsfila[1]=nsrs.getString("Marca");
nsfila[2]=nsrs.getString("Gaveta");
ModeloTablaLista.addRow(nsfila);
}
nsrs.close();
stmnt.close();
tablaDiscosGaveta.setModel(ModeloTablaLista);
}
else
{
System.err.println("No existen datos asociados");
JOptionPane.showMessageDialog(rootPane, "Disco no encontrado, quiere:");
}
我的想法是,包含 if
位代码的左图显示了我需要的结果,就像右图一样。我已经尝试使用 for
循环,添加一个新的结果集并更改 if
条件的位置,但没有结果。
nsrs.next()
移动到 ResultSet
中的下一条记录,所以
if(nsrs.next()== true){
String [] nsfila = new String[3];
移动到第一条记录。
然后
while (nsrs.next()) {
移动到第二条记录,跳过第一条记录。因此代码需要在移动到下一条记录之前处理该记录。这是一种不同的方法:
//if(nsrs.next()== true){
// String [] nsfila = new String[3];
String [] nsfila = null;
while (nsrs.next()) {
nsfila = new String[3];
nsfila[0]=nsrs.getString("Numero_Serie");
nsfila[1]=nsrs.getString("Marca");
nsfila[2]=nsrs.getString("Gaveta");
ModeloTablaLista.addRow(nsfila);
}
if (nsfila == null) {
// no data...
}
另请参阅:尝试使用资源,或在 finally 块中 close()
。