Tôi đang chơi với JDBC/MySQL 5.1. Tôi đã tạo một truy vấn insert
để chèn một số dữ liệu vào một bảng và muốn trả lại khóa đã tạo từ hàng mới được tạo. Tuy nhiên, khi tôi tham khảo cột bằng "id", đó là cột PK và cột tăng tự động của tôi.Tại sao getGeneratedKeys() trả lại "GENERATED_KEY" làm tên cột?
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
// ...
}
Vì vậy, câu hỏi của tôi: Tại sao ResultSet.getGeneratedKeys
sử dụng GENERATED_KEY
như tên cột?