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