Java JDBC CachedRowSet 创建导致 NullPointerException
Java JDBC CachedRowSet creation results in NullPointerException
我正在努力在 Java 程序和 MySQL 数据库之间创建连接。唯一没有包含在代码中的是 ConnectionValue
class,它提取每个特定 connection/query 所需的所有相关连接数据。这个 class 确实有效。当我 运行 代码时,它会创建一个 NullPointerException
.
import javax.sql.rowset.CachedRowSet;
import java.sql.*;
public class SQLCommands {
private Connection connection;
private PreparedStatement preparedStatement;
private CachedRowSet cachedRowSet;
public void createConnection(ConnectionValues connectionValues) throws SQLException {
connection=DriverManager.getConnection(connectionValues.urlString,connectionValues.userName,connectionValues.password);
}
public void createCachedRowSet(ConnectionValues connectionValues, String query) throws SQLException {
cachedRowSet.setUsername(connectionValues.userName);
cachedRowSet.setPassword(connectionValues.password);
cachedRowSet.setUrl(connectionValues.urlString);
cachedRowSet.setCommand(query);
}
public void createPreparedStatement(CachedRowSet cachedRowSet) throws SQLException {
preparedStatement=connection.prepareStatement(cachedRowSet.getCommand());
}
public CachedRowSet readDataBase(int dbID, String query) throws Exception {
ConnectionValues connectionValues=new ConnectionValues(dbID);
createConnection(connectionValues);
System.out.println(connectionValues.urlString+"\n"+connectionValues.password+"\n"+connectionValues.userName);
createCachedRowSet(connectionValues,query);
createPreparedStatement(cachedRowSet);
try {
preparedStatement.execute();
return cachedRowSet;
}catch (Exception e){
System.err.print("ERROR!\nFunction: readDataBase\nClass: SQLCommands\n");
System.err.print(e);
}finally {
connection.close();
}
return cachedRowSet;
}
}
堆栈跟踪报告错误发生在第 14 行。这是函数 createCachedRowSet
中的 cachedRowSet.setUsername(connectionValues.userName);
。数据是正确的,我有一个测试打印方法,打印代码中的相关信息,它不仅没有错误地拉取相同的数据,而且打印了正确的信息。所以我不确定出了什么问题。认识我,大概很明显,但我看不到。
@TeaDrinker ... 请初始化您在第 7 行定义但未在第 14 行初始化的 cachedRowSet 对象,当您设置 属性 的 cachedRowSet 时抛出 NullPointerException。
我正在努力在 Java 程序和 MySQL 数据库之间创建连接。唯一没有包含在代码中的是 ConnectionValue
class,它提取每个特定 connection/query 所需的所有相关连接数据。这个 class 确实有效。当我 运行 代码时,它会创建一个 NullPointerException
.
import javax.sql.rowset.CachedRowSet;
import java.sql.*;
public class SQLCommands {
private Connection connection;
private PreparedStatement preparedStatement;
private CachedRowSet cachedRowSet;
public void createConnection(ConnectionValues connectionValues) throws SQLException {
connection=DriverManager.getConnection(connectionValues.urlString,connectionValues.userName,connectionValues.password);
}
public void createCachedRowSet(ConnectionValues connectionValues, String query) throws SQLException {
cachedRowSet.setUsername(connectionValues.userName);
cachedRowSet.setPassword(connectionValues.password);
cachedRowSet.setUrl(connectionValues.urlString);
cachedRowSet.setCommand(query);
}
public void createPreparedStatement(CachedRowSet cachedRowSet) throws SQLException {
preparedStatement=connection.prepareStatement(cachedRowSet.getCommand());
}
public CachedRowSet readDataBase(int dbID, String query) throws Exception {
ConnectionValues connectionValues=new ConnectionValues(dbID);
createConnection(connectionValues);
System.out.println(connectionValues.urlString+"\n"+connectionValues.password+"\n"+connectionValues.userName);
createCachedRowSet(connectionValues,query);
createPreparedStatement(cachedRowSet);
try {
preparedStatement.execute();
return cachedRowSet;
}catch (Exception e){
System.err.print("ERROR!\nFunction: readDataBase\nClass: SQLCommands\n");
System.err.print(e);
}finally {
connection.close();
}
return cachedRowSet;
}
}
堆栈跟踪报告错误发生在第 14 行。这是函数 createCachedRowSet
中的 cachedRowSet.setUsername(connectionValues.userName);
。数据是正确的,我有一个测试打印方法,打印代码中的相关信息,它不仅没有错误地拉取相同的数据,而且打印了正确的信息。所以我不确定出了什么问题。认识我,大概很明显,但我看不到。
@TeaDrinker ... 请初始化您在第 7 行定义但未在第 14 行初始化的 cachedRowSet 对象,当您设置 属性 的 cachedRowSet 时抛出 NullPointerException。