是否有跨数据库平台的方式来获取刚刚插入的记录的主键?插入行jdbc的主键?
我注意到this answer表示你可以通过调用SELECT LAST_INSERT_ID()
得到它,我认为你可以调用SELECT @@IDENTITY AS 'Identity';
有没有一种常见的方法来在jdbc中跨数据库执行此操作?
如果不是这样,你会建议我为一段可以访问任何SQL Server,MySQL和Oracle的代码实现这个功能吗?
是否有跨数据库平台的方式来获取刚刚插入的记录的主键?插入行jdbc的主键?
我注意到this answer表示你可以通过调用SELECT LAST_INSERT_ID()
得到它,我认为你可以调用SELECT @@IDENTITY AS 'Identity';
有没有一种常见的方法来在jdbc中跨数据库执行此操作?
如果不是这样,你会建议我为一段可以访问任何SQL Server,MySQL和Oracle的代码实现这个功能吗?
从我的代码复制:
pInsertOid = connection.prepareStatement(INSERT_OID_SQL, Statement.RETURN_GENERATED_KEYS);
其中pInsertOid是一份准备好的声明。
你就可以得到关键:
// fill in the prepared statement and
pInsertOid.executeUpdate();
ResultSet rs = pInsertOid.getGeneratedKeys();
if (rs.next()) {
int newId = rs.getInt(1);
oid.setId(newId);
}
希望这给你一个很好的起点。
对于oracle,如果您已经为PKEY值生成映射了一个序列,Hibernate将使用序列中的NEXT_VALUE。
不知道它做什么的MySQL或MS SQL服务器
你试过了Statement.executeUpdate()和Statement.getGeneratedKeys()方法呢?有一个提到这种方法的developerWorks article。
另外,在JDBC 4.0中,Sun添加了row_id feature,它允许您在一行上获得唯一的句柄。该功能由Oracle和DB2支持。对于sql server,您可能需要第三方驱动程序,如this one。
祝你好运!
Spring提供了一些有用的支持this operation和参考指南似乎回答你的问题:
没有一个标准的单一方式 创建一个适当的 PreparedStatement的(这可以解释为什么 的方法签名它的方式是 )。这对甲骨文 工作,不得在其他平台上 是工作的一个例子...
我测试过在MySQL这个例子中,它在那里工作过,但我不能在其他平台上说话。
对于符合SQL-99,可以使用标识列数据库: CREATE TABLE sometable(始终产生身份ID整数(从101开始)PRIMARY KEY,...
使用getGeneratedKeys()检索刚插入executeUpdate(String sql, int autoGeneratedKeys)键使用是Statement.RETURN_GENERATED_KEYS的第二个参数的executeUpdate()
extraneon的答案,虽然正确,不适合甲骨文工作。
您甲骨文做到这一点的方法是:
String key[] = {"ID"}; //put the name of the primary key column
ps = con.prepareStatement(insertQuery, key);
ps.executeUpdate();
rs = ps.getGeneratedKeys();
if (rs.next()) {
generatedKey = rs.getLong(1);
}
只是声明ID列ID整数NULL主键auto_increment
在此之后执行该代码
ResultSet ds=st.executeQuery("select * from user");
while(ds.next())
{
ds.last();
System.out.println("please note down your registration id which is "+ds.getInt("id"));
}
ds.close();
以上代码会告诉你当前行的编号
如果你rem ove ds.last()
比它会显示id列的所有值
适用于Postgres,但不适用于Oracle – 2016-03-14 15:22:20
在Sybase ASE上,只要您已安装元数据存取器信息表,就可以工作。否则,你必须使用`@@ identity`。 – danny 2016-09-09 08:32:33