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()