Java Null Pointer插入本地数据库时出现异常

时间:2012-04-17 21:18:37

标签: java sql jdbc nullpointerexception

我正在尝试将用户名添加到.accdb本地数据库中。我的代码如下:

try
    {
        String sql = "INSERT INTO Users VALUES('?');";
        System.out.println("SQL : " + sql);

        System.out.println("USER : " + user);

        PreparedStatement stmt = database.prepareStatement(sql);
        System.out.println("Statement : " + stmt);
        stmt.setString(1, user); 
        System.out.println("Statement : " + stmt);

        ResultSet results = stmt.executeQuery(); 
        System.out.println("Results : " + results);
    }
    catch(SQLException sqlEx)
    {
        System.out.println("* Cannot execute insertion! *");
        sqlEx.printStackTrace();
        System.exit(1);
    }

控制台输出是:

SQL : INSERT INTO Users VALUES('?');
USER : TEST
Statement : sun.jdbc.odbc.JdbcOdbcPreparedStatement@1bf73fa
Exception in thread "Thread-0" java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.clearParameter    (JdbcOdbcPreparedStatement.java:1023)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setChar    (JdbcOdbcPreparedStatement.java:3057)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setString    (JdbcOdbcPreparedStatement.java:766)
at MultiEchoServer.addRegisteredUser(MultiEchoServer.java:100)
at ClientHandler.run(MultiEchoServer.java:339)

感谢您的帮助!

2 个答案:

答案 0 :(得分:11)

这是问题,我怀疑:

String sql = "INSERT INTO Users VALUES('?');";

该语句不具有任何参数 - 它总是会插入一个问号,因为你已经在引号中得到它所以它是一个而不是一个参数。我想你想要:

String sql = "INSERT INTO Users VALUES(?)";

(请注意,我在SQL语句的末尾也删除了额外的分号 - 我不相信你真的想要那个。)

不幸的是,这个例外没有多大帮助,不可否认......我希望有些东西可以表明指数1超出了范围。

答案 1 :(得分:6)

删除引号和分号:

String sql = "INSERT INTO Users VALUES(?)";