我正在尝试将用户名添加到.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)
感谢您的帮助!
答案 0 :(得分:11)
这是问题,我怀疑:
String sql = "INSERT INTO Users VALUES('?');";
该语句不具有任何参数 - 它总是会插入一个问号,因为你已经在引号中得到它所以它是一个值而不是一个参数。我想你想要:
String sql = "INSERT INTO Users VALUES(?)";
(请注意,我在SQL语句的末尾也删除了额外的分号 - 我不相信你真的想要那个。)
不幸的是,这个例外没有多大帮助,不可否认......我希望有些东西可以表明指数1超出了范围。
答案 1 :(得分:6)
删除引号和分号:
String sql = "INSERT INTO Users VALUES(?)";