0

JDBC 3ドライバーを使用すると、レコードをテーブルに挿入して、列の自動生成された値をすぐに取得できます。この手法はActiveJDBCで使用されます。

テーブルの定義は次のとおりです。

CREATE TABLE users (id  int(11) NOT NULL  auto_increment PRIMARY KEY, first_name VARCHAR(56), last_name VARCHAR(56), email VARCHAR(56)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

これはH2とPostgreSQLで正常に機能しており、戻り値のタイプは整数です。ただし、MySQLでは型はLongですが、整数である必要があると思います。Mysqlでこの同じ行をクエリすると、「id」は整数として返されます。

「getGeneratedKeys()」がMysqlでjava.lang.Longを返す理由と、それを修正する方法を知っている人はいますか?

4

1 に答える 1

1

理由:MySQLが値を追跡するために使用するジェネレーターはBIGINTであるため、ドライバーはそれをBIGINTとして記述し、これはLongと同等です。LAST_INSERT_IDMySQLのマニュアルを参照してください。

PostgreSQLのようなドライバーは、テーブルの実際の列を返します(実際、PostgreSQLは、使用時にすべての列を返しますgetGeneratedKeys()。MySQLは単にを呼び出すと思いますLAST_INSERT_ID()

それを解決する方法:コメントでジム・ギャリソンによって示されているように:常にgetInt()、またはgetLong()を使用し、ではありませんgetObject()

于 2012-10-10T11:49:43.610 に答える