1

.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)

ご協力いただきありがとうございます!

4

2 に答える 2

11

これが問題だと思います:

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

そのステートメントにはパラメーターがありません引用符で囲まれているため、パラメーターではなくであるため、常に疑問符が挿入されます。私はあなたが欲しいと思います:

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

(SQL ステートメントの末尾にある余分なセミコロンも削除したことに注意してください。あなたが本当にそれを望んでいるとは思えません。)

確かに、例外がそれほど役に立たないのは残念です...インデックス1が範囲外であることを示すものがあると思います。

于 2012-04-17T21:21:18.360 に答える
6

引用符とセミコロンを削除します。

String sql = "INSERT INTO Users VALUES(?)";
于 2012-04-17T21:21:47.143 に答える