我正在玩JDBC / MySQL 5.1。我创建了一个insert
查询,将一些数据插入到表中,并希望从新创建的行返回生成的键。但是,当我通过“id”引用列时,这是我的PK和自动增量列。
PreparedStatement ps = St0rm.getInstance().getDatabase("main")
.prepare("INSERT INTO quests (name,minlevel,start_npc,end_npc) VALUES(?,?,?,?)", true); // creates a prepared statement with flag RETURN_GENERATED_KEYS
// ...
int affected = ps.executeUpdate();
ResultSet keys = ps.getGeneratedKeys();
if (affected > 0 && keys.next()) {
St0rm.getInstance().getLogger().warning(String.format("ID Column Name: %s", keys.getMetaData().getColumnName(1))); // says the column name is: GENERATED_KEY
q = new Quest(keys.getInt(1)); // column index from the generated key, no error thrown.
q = new Quest(keys.getInt("id")); // actual column name, line throws a SQLException
// ...
}
所以,我的问题是:为什么ResultSet.getGeneratedKeys
使用GENERATED_KEY
作为列名?
答案 0 :(得分:4)
您不应按名称检索这些列。只有索引,因为 只有一列有MySQL和auto_increments 返回可由Statement.getGeneratedKeys()公开的值。
目前MySQL服务器没有直接返回信息 将能够通过名称检索这些列 有效的方式可能,这就是为什么我把它标记为“成为 稍后修复“,因为我们可以,一旦服务器返回信息 司机可以使用的方式。
来自here(2006年!)。