Java +“““+jTextField3.getText()+”,车辆类型=”“+jTextField4.getText()+””; ResultSet rs=db.execSQL(查询); 如果(rs.equals(null)){ PartNotFound nf=新PartNotFound(); nf.setVisible(真); } 否则{ ResultSetMetaData rsmd=rs.getMetaData(); int numberOfColumns=rsmd.getColumnCount(); int RowCount=0; 对于(int i=1;i

Java +“““+jTextField3.getText()+”,车辆类型=”“+jTextField4.getText()+””; ResultSet rs=db.execSQL(查询); 如果(rs.equals(null)){ PartNotFound nf=新PartNotFound(); nf.setVisible(真); } 否则{ ResultSetMetaData rsmd=rs.getMetaData(); int numberOfColumns=rsmd.getColumnCount(); int RowCount=0; 对于(int i=1;i,java,jdbc,Java,Jdbc,删除以下行,它没有任何作用。 它试图从ResultSet中删除列值,但您尚未滚动到第一行 拆下下面的线路,它没有任何作用。 它试图从ResultSet中删除列值,但您尚未滚动到第一行 如果rs为null,则rs.equals(null)将抛出NullPointerException而不是返回false。然而,如果这不是您得到的异常,那么问题就出在其他地方。如果rs为null,那么rs.equals(null)将抛出NullPointerException而不是返回false。然而,如果这不是您遇

删除以下行,它没有任何作用。 它试图从ResultSet中删除列值,但您尚未滚动到第一行


拆下下面的线路,它没有任何作用。 它试图从ResultSet中删除列值,但您尚未滚动到第一行


如果
rs
为null,则
rs.equals(null)
将抛出
NullPointerException
而不是返回
false
。然而,如果这不是您得到的异常,那么问题就出在其他地方。

如果
rs
为null,那么
rs.equals(null)
将抛出
NullPointerException
而不是返回
false
。然而,如果这不是您遇到的异常,那么问题就出在其他地方。

在访问结果集之前,您始终需要调用结果集的next()。如果不是,指针将指向第一行之前的行。您可以在代码中使用while循环来执行此操作,但在某些地方不使用while循环,这会生成错误:

for (int i = 1; i < numberOfColumns; i++) {
  rs.getString(i);
  result += i + "/n";
}
for(int i=1;i

哦,正如另一张海报所提到的,您没有将结果分配给变量,因此rs.getString(i)调用没有效果。但这可能是错误的根源。

在访问结果集之前,始终需要调用结果集上的next()。如果不是,指针将指向第一行之前的行。您可以在代码中使用while循环来执行此操作,但在某些地方不使用while循环,这会生成错误:

for (int i = 1; i < numberOfColumns; i++) {
  rs.getString(i);
  result += i + "/n";
}
for(int i=1;i
哦,正如另一张海报所提到的,您没有将结果分配给变量,因此rs.getString(i)调用没有效果。但这可能是你的错误根源。

我看到了一些事情

  • 第一个rs从不为空。如果没有行,rs.next()将返回false

  • 结果集开始于第一行之前的位置。您需要调用rs.next()来移动到第一行,如上所述,如果没有行,那么第一行将返回false

ResultSet使用的典型模式是

while (rs.next())
{
  rs.getXXX();
}
  • 完成后,ResultSet应始终关闭()d,否则可能会泄漏数据库资源。这也适用于Connection、Statement、PreparedStatement,所以请检查其他类中的DB代码

  • 在列元数据上循环时,需要执行

    对于(inti=1;i我看到了一些东西

    • 第一个rs从不为空。如果没有行,则rs.next()将返回false

    • ResultSet在第一行之前开始位置。您需要调用rs.next()移动到第一行,如上所述,如果没有行,则返回false

    ResultSet使用的典型模式是

    while (rs.next())
    {
      rs.getXXX();
    }
    
    • 结果
      if (!rs.next()) {
          ...code here to set not found...
      } else {
          ...code here to retrieve the columns...
      }
      
      for (int i = 1; i <= numberOfColumns; i++) {
          result += rs.getString(i) + "\n";
      }
      
      StringBuilder sb = new StringBuilder(256);
      for (int i = 1; i <= numberOfColumns; i++) {
          sb.append(rs.getString(i)).append("\n");
      }
      result = sb.toString();
      
      StringBuilder sb = new StringBuilder(256);
      for (int i = 1; i <= numberOfColumns; i++) {
          sb.append(rsmd.getColumnName(i)).append("\n");
      }
      result = sb.toString();
      
      do {
          RowCount++; // recommend using rowCount.
      } while (rs.next());
      
      DB db = new DB();
      try {
          db.connect();
          String query = "select count(1) from Stock where Part_name =" + ...;
          ResultSet rs = db.execSQL(query);
          if (!rs.next()) {
              PartNotFound nf = ...;
              nf.setVisible(true);
          } else {
              Receptionist_FranchiseePartFound part = new Receptionist_FranchiseePartFound();
              part.setVisible(true);
              rowCount = rs.getInt(1);
              part.getTable().addRowSelectionInterval(0, rowCount);
          }
      } catch (Exception e) {
          ...error handling with stack trace/JOptionPane...
      }