Java 结果集 sqlite 出现空指针异常
Java Null Pointer exception with resultset sqlite
嗨,我得到了空指针异常,但我不明白为什么
DAO (without using utility connection class)
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;
}
}
MODEL
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;
}
}
我在这里有两个问题,第一个是我从连接实用程序 class 关闭了结果集,所以你可以看到我将连接代码转移到 DAO 并且我注释了使用实用程序的行 class(我认为这不是最好的选择,但我不知道如何管理 CachedRowSet)
第二个是,当我尝试在 DAO 内部进行连接时,我试图在调用 getOperatoriList 方法之前从结果集中打印一行,它 returns 我想要的。
然后在调用 getOperatoriList 方法时,它没有为 Operatore 对象设置值,我得到 NullPointerException。
有人可以找出问题所在吗?
有可能取回一个空的结果集,而不是一个空的结果集。
在将它传递给您的方法之前尝试检查 rs == null。
Slaw 已在评论回复中发布了此内容,但您的模型对象中的字段从未初始化。在调用 Operatore.setId()
的内部,id
字段为空,导致 NullPointerException。
嗨,我得到了空指针异常,但我不明白为什么
DAO (without using utility connection class)
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;
}
}
MODEL
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;
}
}
我在这里有两个问题,第一个是我从连接实用程序 class 关闭了结果集,所以你可以看到我将连接代码转移到 DAO 并且我注释了使用实用程序的行 class(我认为这不是最好的选择,但我不知道如何管理 CachedRowSet)
第二个是,当我尝试在 DAO 内部进行连接时,我试图在调用 getOperatoriList 方法之前从结果集中打印一行,它 returns 我想要的。 然后在调用 getOperatoriList 方法时,它没有为 Operatore 对象设置值,我得到 NullPointerException。 有人可以找出问题所在吗?
有可能取回一个空的结果集,而不是一个空的结果集。
在将它传递给您的方法之前尝试检查 rs == null。
Slaw 已在评论回复中发布了此内容,但您的模型对象中的字段从未初始化。在调用 Operatore.setId()
的内部,id
字段为空,导致 NullPointerException。