Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java+;SQL-NullPointerException错误_Java_Sql_Jdbc_Nullpointerexception - Fatal编程技术网

Java+;SQL-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

我得到这个错误:

线程“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;

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 );