Java PreparedStatement nullPointerException

时间:2014-05-31 10:59:49

标签: java jdbc

我有两个类,在第一个类中我声明了我与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行是准备好的声明的行。抱歉格式化。

2 个答案:

答案 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。