(参考了这篇文章 )
数据库是 SQL Server 2000
作为数据库菜鸟, 为这个问题头疼了很久, 今天终于痛下决心解决掉, 爬文后得到解决方案, 心中暗爽.
"SQLServer:
INSERT INTO tableName (fieldList ...) values (valueList ...) SELECT @@IDENTITY AS aliasName;
这一句相当于执行查询操作,从结果集中getXXX(aliasName);就可以获取.
Oracle Release 2(之前的版本要先定义 ":aliasName"):
INSERT INTO tableName (fieldList ...) values (valueList ...) RETURNING [primaryKey INTO] aliasName;
同上的方法可以获取.这两种方法都是数据库支持的sql语句,原以根本不存在并发冲突.
mysql:
没有找到可以绝对保证原子性的语句(谁知道反馈一下)"
这里要纠正下, 直接用 "Insert ...; Select @@IDENTITY ... " 作为 SQL 语句执行 Statement.executeQuery(sql) 有问题, 会报异常 "该语句没有返回结果集 "
搜索后找到解决方案, 在语句前增加 "SET NOCOUNT ON;" 即可
即 "SET NOCOUNT ON;Insert ...; Select @@IDENTITY ...;", 执行后即可通过返回的 ResultSet 得到新增项的 ID