Java+;SQL-NullPointerException错误
我得到这个错误: 线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常 代码是Java+;SQL-NullPointerException错误,java,sql,jdbc,nullpointerexception,Java,Sql,Jdbc,Nullpointerexception,我得到这个错误: 线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常 代码是 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.sql.ResultSet; import javax.swing.JOptionPane; publi
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;
public class Bookstore extends javax.swing.JFrame {
Connection con;
Statement stmt;
ResultSet rs;
public Bookstore () {
initComponents();
DoConnect();
}
public void DoConnect() {
try {
String host = "jdbc:derby://localhost:1527/Database";
String userName = "user2408";
String password = "password2408";
Connection con = DriverManager.getConnection(host, userName, password);
Statement stmt = con.createStatement( );
String SQL = "SELECT * FROM SHELF";
ResultSet rs = stmt.executeQuery( SQL );
rs.next();
int ID= rs.getInt("KeyID");
String BookID = Integer.toString(ID);
String BookName = rs.getString("Name");
String AuthorName = rs.getString("Author");
String ReleaseDate = rs.getString("Release");
String AuthorContact = rs.getString("Email");
float Price = rs.getFloat("Price");
String BookPrice = Float.toString(Price);
BookIDTF.setText(BookID );
BookNameTF.setText(BookName);
AuthorNameTF.setText(AuthorName);
ReleaseDateTF.setText(ReleaseDate);
AuthorContactTF.setText(AuthorContact);
BookPriceTF.setText(BookPrice);
}
catch (SQLException err) {
JOptionPane.showMessageDialog(Bookstore.this, err.getMessage());
}
}
private void NextButtonActionPerformed(java.awt.event.ActionEvent evt) {
try {
if (rs.next()) { //this is where error occurs
int ID= rs.getInt("KeyID");
String BookID = Integer.toString(ID);
String BookName = rs.getString("Name");
String AuthorName = rs.getString("Author");
String ReleaseDate = rs.getString("Release");
String AuthorContact = rs.getString("Email");
float Price = rs.getFloat("Price");
String BookPrice = Float.toString(Price);
BookIDTF.setText(BookID );
BookNameTF.setText(BookName);
AuthorNameTF.setText(AuthorName);
ReleaseDateTF.setText(ReleaseDate);
AuthorContactTF.setText(AuthorContact);
BookPriceTF.setText(BookPrice);
}
else {
rs.previous();
JOptionPane.showMessageDialog(Bookstore.this, "End of File");
}
}
catch (SQLException err) {
JOptionPane.showMessageDialog(Bookstore.this, err.getMessage());
}
}
当您试图调用方法或引用空对象上的属性时,Java抛出NullPointerException(通常缩写为NPE)
这篇文章我已经读了10遍了,但我仍然不知道哪里可能出错
如果我评论/删除下一步按钮功能,它就会工作。构造函数将数据库中的第一行加载到应用程序中。我想了解的是,为什么它不能用于下一个函数。
提到:表有3个条目,因此有下一个条目要转到,这意味着该表不是NPE的原因看起来您正在创建另一个ResultSet实例,该实例在
ResultSet rs=stmt.executeQuery(SQL)中的作用域不同代码>
DoConnect中的上一行使rs成为该函数的局部变量。这与作为实例变量声明的rs不同,并且在该函数结束时超出范围。因此,在NextButtonActionPerformed中,rs(实例变量)仍然为空 BookIDTF.setText
这些变量在哪里定义过?它们是使用NetBeans创建的。我认为复制生成的代码是没有意义的,谢谢你为我澄清。但是我还没有成功。我怎样才能修好它?我一定是做错了什么
ResultSet rs = stmt.executeQuery( SQL );