当我按字符串过滤时,表格未显示所有数据

时间:2019-06-12 16:32:17

标签: java if-statement while-loop jtable resultset

如果我正在过滤的ID不在我创建的表模型中,我想获得一个messageDialog。问题是代码在没有if的情况下可以正常工作,但是当我为messageDialog条件添加if时,我意识到找到了数据但未显示。

比较:
Compare

代码:

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循环,添加了一个新的resultSet并更改了没有结果的if条件的位置。

1 个答案:

答案 0 :(得分:0)

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...
}

另请参阅:尝试使用资源,或在最终块中使用close()