Таблица не показывает все данные, когда я фильтрую по строке - PullRequest
0 голосов
/ 12 июня 2019

Я хотел бы получить messageDialog, если фильтруемый идентификатор отсутствует в модели таблицы, которую я создал.Проблема в том, что код работает нормально без if, однако, когда я добавляю if для условия messageDialog, я понимаю, что данные найдены, но не показаны.

Сравнение:
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 голосов
/ 12 июня 2019

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() в блоке finally.

...