I am trying to add a username into a .accdb local database. My code is as followed:
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);
}
The console output is :
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)
Thanks for your help!
This is the problem, I suspect:
That statement doesn’t have any parameters – it will always insert a question mark, because you’ve got it in quotes so it’s a value rather than a parameter. I think you want:
(Note that I’ve removed the extra semi-colon at the end of the SQL statement too – I don’t believe you really want that.)
It’s unfortunate that the exception isn’t more helpful, admittedly… I’d expect something to indicate that index 1 was out of range.