当前位置: 首页 > 面试题库 >

JDBC插入多行

凌通
2023-03-14
问题内容

我现在正在使用批处理:

String query = "INSERT INTO table (id, name, value) VALUES (?, ?, ?)";
PreparedStatement ps = connection.prepareStatement(query);            
for (Record record : records) {
    ps.setInt(1, record.id);
    ps.setString(2, record.name);
    ps.setInt(3, record.value);
    ps.addBatch();
}
ps.executeBatch();

我只是想知道上面的代码是否等效于下面的代码。如果没有,哪个更快?

String query = "INSERT INTO table (id, name, value) VALUES ";
for (Record record : records) {
    query += "(" + record.id + ",'" + record.name + "'," + record.value + "),";
}
query = query.substring(1, query.length() - 1);
PreparedStatement ps = connection.prepareStatement(query);
ps.executeUpdate();

问题答案:

首先,使用查询字符串连接,不仅会丢失PreparedStatement方法固有的类型转换,而且还容易受到数据库中正在执行的恶意代码的攻击。

其次,PreparedStatement先前已缓存在数据库本身中,与纯语句相比,这已经带来了很好的性能改进。



 类似资料:
  • 问题内容: 我正在尝试使用jdbc将一些数据插入到我的数据库中。我正在使用正确的表,数据库名称和参数。一切检查完毕。 代码 这是当我尝试运行它时给我的错误: 问题答案: 您在此行中有语法错误: 您缺少values子句的右括号。

  • 问题内容: 是否有一种跨数据库平台的方法来获取刚刚插入的记录的主键? 我注意到,这个答案表明您可以通过调用来获得它,而且我认为您可以调用jdbc中的数据库来实现此目的吗? 如果不是,您如何建议我为可以访问SQL Server,MySQL和Oracle中的任何代码的代码实现此功能? 问题答案: 从我的代码复制: 其中pInsertOid是准备好的语句。 然后您可以获取密钥: 希望这为您提供一个良好的

  • 问题内容: 我尝试将序列.nextval作为主键插入表中,Java中的sql是 但是,错误是 其他所有字段都是正确的,我认为这是顺序问题,这是正确的吗? 问题答案: 问题在于第一列是数字数据类型,但是您准备的语句正在提交字符串/ VARCHAR数据类型。该语句按原样运行,Oracle没有机会转换对nextval的使用来获取序列值。 这是通过Java的PreparedStatement语法的替代方法

  • 主要内容:所需步骤,示例代码在本教程将演示如何在JDBC应用程序中向数据库的一个表中插入数据记录。 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中数据库表中插入数据记录。 要执行以下示例,需要用实际用户名和密码替换这里用户名()和密码()。 MySQL或数据库已启动并运行。 所需步骤 使用JDBC应用程序向表中插入数据记录需要以下步骤: 导入包:需要包含包含数据库编程所需的JDBC类的

  • 我需要使用JDBC在Oracle数据库中进行大量插入,即两位数百万。为此,我使用了类似于以下类的东西,灵感来自使用JDBC进行批处理插入的高效方法: 虽然这种插入方式很好,但速度非常慢。JDBC batch insert performance描述了MySQL基本上可以解决这个问题,因为在Oracle上似乎不存在,但在这里没有太大帮助。 为了提高性能,我还尝试将语句切换为一个大的

  • 我在。NET本地SQL客户端之间用C#进行了一些测试,并与java中的JDBC驱动程序进行了比较,结果让我大吃一惊,我想我一定是在。NET代码中做错了什么。结果在一个有整数和文本字段的表中插入100万次,我在每次尝试之前清空它,运行为发布而构建的程序,并由它们自己运行。 null 更新:SQL探查器结果。NET: SQL探查器结果JDBC: