我正在使用Java(jdbc)與MySQL數據庫交互。我有一個主要索引是自動增量表。當我插入一行時,我需要獲取它剛收到的索引。我怎麼做?從MySQL數據庫獲取插入行的索引
8
A
回答
7
stmt.executeUpdate(
"INSERT INTO autoIncTutorial (dataField) "
+ "values ('Can I Get the Auto Increment Field?')",
Statement.RETURN_GENERATED_KEYS);
//
// Example of using Statement.getGeneratedKeys()
// to retrieve the value of an auto-increment
// value
//
int autoIncKeyFromApi = -1;
rs = stmt.getGeneratedKeys();
if (rs.next()) {
autoIncKeyFromApi = rs.getInt(1);
} else {
// throw an exception from here
}
rs.close();
rs = null;
0
另外,使用Spring JDBC它會是什麼樣子:
Map<String, Object> map = new HashMap<String, Object>();
map.put("column1", "test");
map.put("column2", Boolean.TRUE);
SimpleJdbcInsert insert = new SimpleJdbcInsert(template).withTableName("table").usingGeneratedKeyColumns("id");
int id = insert.executeAndReturnKey(map).intValue();
2
感謝約翰·博克的出色的響應。
如果您希望使用PreparedStatement的,你仍然可以使用RETURN_GENERATED_KEYS
,但你必須運用不同的命令:
PreparedStatement ps = mysql.prepareStatement(
"INSERT INTO myTable (colA, colB, colC) VALUES (?, ?, ?)",
Statement.RETURN_GENERATED_KEYS);
ps.setString(1, "My text");
ps.setTimestamp(2, new java.sql.Timestamp(new java.util.Date().getTime()););
ps.setInt(3, 5150);
ps.executeUpdate();
ResultSet results = ps.getGeneratedKeys();
results.next(); // Assume just one auto-generated key; otherwise, use a while loop here
System.out.println(results.getInt(1)); // there should only be 1 column in your results: the value of the auto-generated key
- 添加
RETURN_GENERATED_KEYS
PARAM在prepareStatement()
功能。 - 從
statement.executeUpdate()
得到的結果不是statement.getGeneratedKeys()
。
相關問題
- 1. 如何從MySQL數據庫插入/獲取數據?
- 2. 從RSS獲取數據並插入MYSQL
- 3. 獲取行的ID剛剛插入MySQL數據庫
- 4. 無法從MySQL數據庫獲取行
- 5. 獲取從MySQL數據庫
- 6. MYSQL獲取從今天插入的行
- 7. 插入行MySQL數據庫與庫MySQLi
- 8. 在mysql數據庫中加入索引
- 9. 如何從wordpress數據庫獲取最後插入的行ID?
- 10. Solr - 索引MySQL數據庫
- 11. 有關數據庫中插入和更新獲取索引的問題
- 12. 從TableView中獲取數據並插入到數據庫中
- 13. 插入到mysql數據庫
- 14. 插入到MySQL數據庫
- 15. 插入MySQL數據庫
- 16. 插入並從Mysql數據庫檢索圖像
- 17. 獲取插入數據庫值
- 18. 獲取數據庫插入錯誤
- 19. 從函數獲取數據中插入
- 20. Redbeanphp - 從外鍵索引獲取數據
- 21. 從索引數據庫獲取所有數據並使用post方法將其插入到服務器端
- 22. 從AngularJS站點插入和檢索MySQL數據庫中的數據
- 23. Laravel從textarea中獲取每行並插入數據庫中的新行
- 24. 插入數據到MySQL數據庫中使用引導
- 25. SEO:從數據庫檢索數據和URL,抓取和索引
- 26. 如何從MySQL數據庫中獲取隨機數的行?
- 27. 表示未定義索引時將數據插入數據庫
- 28. MySQL數據庫插入數據限制
- 29. JSP將數據插入MYSQL數據庫
- 30. 不插入數據MySQL數據庫
如何利用此索引搜索更快的激光? – David 2010-12-19 15:22:54
@大衛:你是什麼意思?主鍵始終是索引,因此如果查詢索引,將總是有助於更快地搜索。問一個單獨的問題,如果你想更多的說明:) – Konerak 2010-12-19 15:44:00
我認爲主鍵可以索引,而不是本身的索引。我相信它是完全有效的(儘管通常不推薦)使用varchar(60)作爲主鍵。然後檢索剛剛插入的主鍵的索引而不是值本身會很有趣。更具體地說,在存儲最後一條記錄的磁盤上獲得某種位置會很有用,所以如果事實證明它應該被修改(例如由於用戶單擊了撤消按鈕),可以快速修改它, 。希望我現在不劫持這個步伐... – David 2010-12-20 14:54:42