0

Java を使用してユーザーを SQL データベース テーブルに挿入しています。挿入はうまく機能します。ただし、ユーザー ID は主キーであり、自動インクリメントを取得します。新しいユーザーをテーブルに挿入した後、ユーザー ID の値を取得したいと考えています。

挿入部分は次のとおりです。

PreparedStatement create_statement;
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO ");
sb.append(this.get_database());
sb.append(".dbo.");
sb.append(this.get_table());
sb.append(" ( username, password, email_addr, first_name, middle_name, last_name, dob, street_addr, phone_num, bio)   ");
sb.append(" VALUES( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? );");

try {
    create_statement = this.sql_connection.prepareStatement(sb.toString());
    create_statement.setString(1, this.username);
    create_statement.setString(2, this.password);
    create_statement.setString(3, this.email_addr);
    create_statement.setString(4, this.first_name);
    create_statement.setString(5, this.middle_name);
    create_statement.setString(6, this.last_name);
    create_statement.setString(7, this.dob);
    create_statement.setString(8, this.street_addr);
    create_statement.setString(9, this.phone_num);
    create_statement.setString(10, this.bio);
    create_statement.executeUpdate();

私は 1 時間答えを探しています。一部の人はResultSetを使用して答えを探しています。ただし、 create_statementからデータを取得しようとすると、エラーまたは null が発生し続けます

ヘルプ :(

4

1 に答える 1

3

ここで executeQuery と executeUpdate を比較してください。

http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/PreparedStatement.html

int を返すため、executeUpdate から ResultSet を取得することはできません。また、ここで executeQuery を使用することもできません。これは、INSERT を実行していて、何も選択していないためです。代わりにこれを使用してください

create_statement = this.sql_connection.prepareStatement(sb.toString(),
                   Statement.RETURN_GENERATED_KEYS);
//your code
ResultSet res = create_statement.getGeneratedKeys();

そして、学習するときも、変数には適切な名前を付ける必要があります。それはcreateステートメントではありませんね。

于 2012-10-07T17:50:02.930 に答える