java - 当我按字符串过滤时,表不显示所有数据

标签 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 循环,添加新的结果集并更改 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 block 中使用close()

关于java - 当我按字符串过滤时,表不显示所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56566764/

相关文章:

c - 需要帮助找出无限循环

java - 为什么当我尝试更改此 case 语句中的变量时,它不会更改该循环之外的变量

java - 读取 .pem 文件时出错?

java - 对象引用变量重新赋值

java - 启动 Web 启动应用程序时出现 NullPointerException

vba - 我使用 OR 在 VBA 上形成多个条件 IF ELSE 语句,它不起作用

java - 如何获取 NumberPicker 小部件的值?

R: "Binning"分类变量

c - 如何避免if语句?因为编译器无法将其优化为 simd

c# - 生成 0 到 9 之间的三个唯一数字列表的最佳方法