使用resultset sqlite的Java空指针异常?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (129)

我得到nullpointerexception,但我不明白为什么

DAO(不使用实用程序连接类)

 package application.model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import application.util.SqlConnection;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

public class OperatoreDAO {

    public static ObservableList<Operatore> cercaOperatori() throws SQLException, ClassNotFoundException {
        //Declare a SELECT statement
        String selectStmt = "SELECT * FROM Operatori WHERE DataCessazione=\"\"";

        //Execute SELECT statement
        try {
                Class.forName("org.sqlite.JDBC");
                Connection conn = DriverManager.getConnection("jdbc:sqlite:C:/Users/Utente/Desktop/DB/prova.db");
                PreparedStatement stmt = conn.prepareStatement(selectStmt);
                ResultSet rsOperatori = stmt.executeQuery();

            //Get ResultSet from dbExecuteQuery method
            //ResultSet rsOperatori = SqlConnection.dbExecuteQuery(selectStmt);


            ObservableList<Operatore> operatoriList = getOperatoriList(rsOperatori);


            return operatoriList;
        } catch (SQLException e) {
            System.out.println("SQL select operation has been failed: " + e);
            //Return exception
            throw e;
        }
    }

    private static ObservableList<Operatore> getOperatoriList(ResultSet rs) throws SQLException, ClassNotFoundException {

        ObservableList<Operatore> operatoriList = FXCollections.observableArrayList();

        while (rs.next()) {
            Operatore op = new Operatore();
            op.setId(rs.getInt("idOperatore"));
            op.setCognome(rs.getString("Cognome"));
            op.setNome(rs.getString("Nome"));
            op.setSesso(rs.getString("Sesso"));
            op.setEta(rs.getInt("Eta"));
            op.setDomicilio(rs.getString("Domicilio"));

            operatoriList.add(op);

        }

        return operatoriList;
    }


}

模型

package application.model;

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.StringProperty;

public class Operatore {
    private  IntegerProperty id;
    private  StringProperty cognome;
    private  StringProperty nome;
    private  StringProperty sesso;
    private  IntegerProperty eta;
    private  StringProperty domicilio;


    public int getId() {
        return id.get();
    }

    public void setId(int idIn) {
        id.set(idIn);
    }

    public IntegerProperty idProperty() {
        return id;
    }

    public String getNome() {
        return nome.get();
    }

    public void setNome(String nomeIn) {
        nome.set(nomeIn);
    }

    public StringProperty nomeProperty() {
        return nome;
    }

    public String getCognome() {
        return cognome.get();
    }

    public void setCognome(String cognomeIn) {
        cognome.set(cognomeIn);
    }

    public StringProperty cognomeProperty() {
        return cognome;
    }

    public String getSesso() {
        return sesso.get();
    }

    public void setSesso(String sessoIn) {
        sesso.set(sessoIn);
    }

    public StringProperty sessoProperty() {
        return sesso;
    }

    public int getEta() {
        return eta.get();
    }

    public void setEta(int etaIn) {
        eta.set(etaIn);
    }

    public IntegerProperty etaProperty() {
        return eta;
    }

    public String getDomicilio() {
        return domicilio.get();
    }

    public void setDomicilio(String domicilioIn) {
        domicilio.set(domicilioIn);
    }

    public StringProperty domicilioProperty() {
        return domicilio;
    }


}

我在这里有两个问题,第一个是我从连接实用程序类中关闭resultset,因为你可以看到我将连接代码转移到DAO,并且我评论了使用实用程序类的行(不是我认为的最佳选择,但我不不知道如何管理CachedRowSet)

第二个是当我尝试在DAO内部连接时,我试图在调用getOperatoriList方法之前从结果集打印一行,并返回我想要的内容。然后,在调用getOperatoriList方法时,它不会将值设置为Operatore对象,并且会得到NullPointerException。有人可以弄清楚有什么问题?

提问于
用户回答回答于

可以获得空的ResultSet,而不是空的。

在将rs=NULL传递给你的方法之前,尝试检查它是否为空。

用户回答回答于

slaw已经在评论回复中发布了这一点,但是模型对象中的字段从未初始化过。Operatore.setId()id字段为NULL,从而导致NullPointerException。

扫码关注云+社区

领取腾讯云代金券