gpt4 book ai didi

java - 为什么我不断收到对 ResultSet 进行非法操作的异常?

转载 作者:行者123 更新时间:2023-12-01 17:39:43 25 4
gpt4 key购买 nike

为什么我总是在 ResultSet 上收到异常非法操作?

这是代码:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/*
* SearchParts.java
*
* Created on 08-Mar-2010, 12:14:31
*/
package garits;

import java.sql.*;
import javax.swing.*;

/**
*
* @author Deniz
*/
public class SearchParts extends javax.swing.JFrame {

/** Creates new form SearchParts */
public SearchParts() {
initComponents();
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
if (!jTextField1.getText().equals("")) {
String result = "";
int Partnumber = Integer.parseInt(jTextField1.getText());
DB db = new DB();
try {
db.connect();
String query = "Select * from Stock Where Part_no =" + "'" + jTextField1.getText() + "'";
ResultSet rs = db.execSQL(query);
if (rs.equals(null)) {
PartNotFound nf = new PartNotFound();
nf.setVisible(true);

} else {
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
int RowCount = 0;
for (int i = 1; i < numberOfColumns; i++) {
rs.getString(i);
result += i + "/n";
}

if (!result.equals("")) {
Receptionist_FranchiseePartFound part = new Receptionist_FranchiseePartFound();
part.setVisible(true);
while (rs.next()) {
RowCount++;



}

part.getTable().addRowSelectionInterval(0, RowCount);


} else {
PartNotFound nf = new PartNotFound();


}
}
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(jButton1, "More information needed for search", "Error Message", JOptionPane.ERROR_MESSAGE);
}


} else if (!jTextField2.getText().equals("")) {
String result = "";

DB db = new DB();
try {
db.connect();
String query = "Select * from Stock Where Part_name =" + "'" + jTextField2.getText() + "'";
ResultSet rs = db.execSQL(query);
if (rs.equals(null)) {
PartNotFound nf = new PartNotFound();
nf.setVisible(true);

} else {
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
int RowCount = 0;
for (int i = 1; i < numberOfColumns; i++) {
rs.getString(i);
result += i + "/n";
}


// Receptionist_FranchiseePartFound part = new Receptionist_FranchiseePartFound();
// part.setVisible(true);
if (!result.equals("")) {
Receptionist_FranchiseePartFound part = new Receptionist_FranchiseePartFound();
part.setVisible(true);
while (rs.next()) {
RowCount++;



}
part.getTable().addRowSelectionInterval(0, RowCount);


} else {
PartNotFound nf = new PartNotFound();
nf.setVisible(true);

}
}



} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(jButton1, "More information needed for search", "Error Message", JOptionPane.ERROR_MESSAGE);
}
} else if (jTextField1.getText().equals("") && jTextField2.getText().equals("")) {
String result = "";
DB db = new DB();
try {
db.connect();
String query = "Select * from Stock Where Manufacturer =" + "'" + jTextField3.getText() + "'AND Vehicle_type ='" + jTextField4.getText() + "'";
ResultSet rs = db.execSQL(query);
if (rs.equals(null)) {
PartNotFound nf = new PartNotFound();
nf.setVisible(true);

}
else{

ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
int RowCount = 0;
for (int i = 1; i < numberOfColumns; i++) {
rs.getString(i);
result += i + "/n";
}


// Receptionist_FranchiseePartFound part = new Receptionist_FranchiseePartFound();
// part.setVisible(true);
if (!result.equals("")) {
Receptionist_FranchiseePartFound part = new Receptionist_FranchiseePartFound();
part.setVisible(true);
while (rs.next()) {
RowCount++;



}
part.getTable().addRowSelectionInterval(0, RowCount);


} else {
PartNotFound nf = new PartNotFound();
nf.setVisible(true);

}
}



} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(jButton1, "More information needed for search", "Error Message", JOptionPane.ERROR_MESSAGE);
}


} else if (jTextField3.getText().equals("") || jTextField4.getText().equals("")) {
JOptionPane.showMessageDialog(jButton1, "More information needed for search", "Error Message", JOptionPane.ERROR_MESSAGE);
}

}
/**
* @param args the command line arguments
*/
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
// End of variables declaration
}

最佳答案

我看到了一些东西

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

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

ResultSet 使用的典型模式是...

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

  • 循环列元数据时您需要执行的操作..

    for (int i = 1; i <= 列数; i++) {}

请注意 <= 而不是 <。正如您所正确发现的,JDBC 列索引从 1 开始。

  • 值得考虑使用一个隐藏所有 JDBC 噪音的库。考虑一下 spring,它具有基本的 JDBC 抽象,同时保留所有功能或一直到 hibernate,它非常强大,但有相当长的学习曲线。对于你的情况,我建议只使用 Spring Material 。

参见:Spring docs

关于java - 为什么我不断收到对 ResultSet 进行非法操作的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2596309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com