是否有一种跨数据库平台的方法来获取刚刚插入的记录的主键?
我注意到,这个答案表明您可以通过调用来获得它,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);
}
希望这为您提供一个良好的起点。
问题内容: 我现在正在使用批处理: 我只是想知道上面的代码是否等效于下面的代码。如果没有,哪个更快? 问题答案: 首先,使用查询字符串连接,不仅会丢失PreparedStatement方法固有的类型转换,而且还容易受到数据库中正在执行的恶意代码的攻击。 其次,PreparedStatement先前已缓存在数据库本身中,与纯语句相比,这已经带来了很好的性能改进。
如何仅对新行(目标表中不存在ID列值)使用jdbc有效地执行对Sql Server表的批处理插入? 实际上,我使用PreparedStatement对象创建批处理,但没有“仅在新行时插入”逻辑:
问题内容: 我正在尝试使用jdbc将一些数据插入到我的数据库中。我正在使用正确的表,数据库名称和参数。一切检查完毕。 代码 这是当我尝试运行它时给我的错误: 问题答案: 您在此行中有语法错误: 您缺少values子句的右括号。
问题内容: 我尝试将序列.nextval作为主键插入表中,Java中的sql是 但是,错误是 其他所有字段都是正确的,我认为这是顺序问题,这是正确的吗? 问题答案: 问题在于第一列是数字数据类型,但是您准备的语句正在提交字符串/ VARCHAR数据类型。该语句按原样运行,Oracle没有机会转换对nextval的使用来获取序列值。 这是通过Java的PreparedStatement语法的替代方法
问题内容: 错误: 违反主键约束。 无法在对象中插入重复的密钥。 如何使第一行之后的主键递增? 我希望能够同时向此表添加项目列表,而不是将其插入RBAR。 谢谢您的帮助 问题答案: 仅对于此语句,ID将是顺序的,例如,如果ID为99,并且要插入4条记录,则ID为100、101、102、103。如果同时插入多个进程,则很容易违反约束,但是这并不是说,这比使用单条记录本质上不安全的情况要糟。
主要内容:所需步骤,示例代码在本教程将演示如何在JDBC应用程序中向数据库的一个表中插入数据记录。 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中数据库表中插入数据记录。 要执行以下示例,需要用实际用户名和密码替换这里用户名()和密码()。 MySQL或数据库已启动并运行。 所需步骤 使用JDBC应用程序向表中插入数据记录需要以下步骤: 导入包:需要包含包含数据库编程所需的JDBC类的