我有两个类,在第一个类中我声明了我与derby数据库的连接
static final String DATABASE_URL = "jdbc:derby://localhost:1527/A3";
Connection conn = null;
public ConnectionToSql() throws ClassNotFoundException {
try {
conn = DriverManager.getConnection(
DATABASE_URL, "root", "1234" );
} catch (SQLException e) {
}
在我的第二节课中我使用了preparedStatement
public String validateUser(String username, String password) {
try {
PreparedStatement ps = (PreparedStatement) conn.prepareStatement("SELECT * FROM users where username = ? and password = ?");
ps.setObject(1, username);
ps.setObject(2, password);
ResultSet rs = ps.executeQuery();
我得到:线程中的异常"线程0"显示java.lang.NullPointerException 在Server.SqlRepository.validateUser(SqlRepository.java:28)
第28行是准备好的声明的行。抱歉格式化。
答案 0 :(得分:1)
如果您的连接正在另一个类中实例化,您如何将对它的引用移动到该类以创建预准备语句?另外,如果您正确地将引用移动到第二个类,那么如何确保DriverManager.getConnection()
返回有效连接或者没有抛出异常?
显然,conn
未实例化或引用null。
try {
conn = DriverManager.getConnection(
DATABASE_URL, "root", "1234" );
} catch (SQLException e) {
// You are doing nothing if the statement in your try block throws an exception.
}
在上面的代码中,您正在执行所谓的吞咽和Exception
,这意味着如果发生异常,则无法完成任何操作。在至少,您可以将e.printStackTrace();
添加到catch块中,以便在引发Exception
时可以在控制台中看到。
如果getConnection()
在您当前的代码中引发Exception
,那么当您致电conn.prepareStatement()
时,conn
将为null
,因此NullPointerException
。我希望这会有所帮助。
供参考;
答案 1 :(得分:0)
最有可能的原因:DriverManager.getConnection抛出一个异常然后浅薄的异常。在这种情况下,conn将为null。