我正在尝试将用户名添加到.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)


谢谢你的帮助!

最佳答案

我怀疑这是问题:

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


该语句没有任何参数-它将始终插入问号,因为您已用引号将其引起来,因此它是一个值而不是参数。我想你要:

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


(请注意,我也已在SQL语句的末尾删除了多余的分号-我不相信您确实想要这样做。)

不幸的是,该异常并没有更多帮助,诚然...我希望能有一些事情表明索引1超出范围。

关于java - 插入本地数据库时的Java空指针异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10199319/

10-10 11:45