3

executeUpdate生成されたキーを返すように指定した場合でも、以下のメソッド ( ) が常に 1 を返す理由を誰か教えてもらえますか? generatedKey生成されたキーを変数で取得したい。をPreparedStatement使用しても問題なく動作getGeneratedKeysしますが、 でやりたいですStatement

    public int testQuery(Connection con) {

        int generatedKey = 0;

        try {

            Statement statement = con.createStatement();
            generatedKey = statement.executeUpdate("INSERT INTO profile (fullname) VALUES ('Visruth CV')", Statement.RETURN_GENERATED_KEYS);

        } catch (SQLException e) {          
            e.printStackTrace();
        } finally {
           try { 
               con.close();
           } catch(Exception ex) {
               ex.printStackTrace();
           }
        }
        System.out.println("generated key : "+generatedKey);

        return generatedKey;
    }

のドキュメントにexecuteUpdate(String sql, int autoGeneratedKeys)よると、次のように書かれています。

Executes the given SQL statement and signals the driver with the given flag about whether the auto-generated keys produced by this Statement object should be made available for retrieval. The driver will ignore the flag if the SQL statement is not an INSERT statement, or an SQL statement able to return auto-generated keys (the list of such statements is vendor-specific).

Parameters:
    sql an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or DELETE; or an SQL statement that returns nothing, such as a DDL statement.
    autoGeneratedKeys a flag indicating whether auto-generated keys should be made available for retrieval; one of the following constants: Statement.RETURN_GENERATED_KEYS Statement.NO_GENERATED_KEYS
Returns:
    either (1) the row count for SQL Data Manipulation Language (DML) statements or (2) 0 for SQL statements that return nothing
Throws:
    SQLException - if a database access error occurs, this method is called on a closed Statement, the given SQL statement returns a ResultSet object, or the given constant is not one of those allowed
    SQLFeatureNotSupportedException - if the JDBC driver does not support this method with a constant of Statement.RETURN_GENERATED_KEYS
Since:
    1.4
4

2 に答える 2

6

貼り付けたjavadocには次のように書かれています:

returns: either (1) the row count for SQL Data Manipulation Language or (2) 0 for SQL statements that return nothing

常に1つの値のみを挿入しているため、1が返されます。生成されたキーは返しません。

生成されたキーを取得するには、次の行を実行する必要があります。

rs = stmt.getGeneratedKeys()

この概念に関する完全なチュートリアルをここで読むことができます。

于 2013-05-16T07:39:53.343 に答える