java - 我怎样才能批量插入?

标签 java performance jdbc prepared-statement teradata

我想用 jdbc 向 TERADATA 插入数据,但是速度很慢。我怎样才能让它更快?

我写了这段代码:

connection_tera= DriverManager.getConnection
             (
             "jdbc:teradata://192.168.x.xx/database=DBC,tmode=ANSI,charset=UTF8","dbc","dbc"
             ); 

stmt_tera = connection_tera.prepareStatement("insert into a.b values(?)");
//some code here to start while loop 
  stmt_tera.setObject(i,reset.getobject(i));
  stmt_tera.addBatch();  
 if(addedBatchNumber%100==0)
  stmt_tera.executeBatch(); 
  connection_tera.commit(); 
  stmt_tera.clearBatch();
//some code here and finish while loop

我应该将 TYPE=FASTLOAD 之类的参数添加到连接字符串吗?还是别的?

最佳答案

如果您要加载到一个 表,我会考虑使用 JDBC FastLoad。有关 JDBC 将数据插入 Teradata 表的性能的更多详细信息,请参阅 Teradata Developer Exchange 上的以下文章:Speed up your JDBC/ODBC Applications

如果您的表不为空,则将数据加载到首先为空的暂存(中间)表可能是有意义的。然后使用 ANSI MERGE 操作将 INSERT/UPDATE 逻辑应用于目标表。 MERGE 操作将比传统的 INSERTUPDATE 语句执行得更快,因为该操作在 block 级别而不是行级别进行。在某些情况下,您甚至可以避免在数据应用于目标表之前假脱机处理源数据。

这是一个collection示例 Teradata JDBC 驱动程序。程序 205 到 209 是使用 FastLoad 的示例。

关于java - 我怎样才能批量插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17443722/

相关文章:

java - 递归解析 JSON 对象 - Java

python - count() 的奇怪执行时间

java - 使用 Java JDBC 查询满足 SQLite 约束

java - 带有 JDBC : DBCP vs C3P0 的连接池选项

Java JFrame - 按键似乎没有注册

java - 我在 Eclipse 中的检查样式插件没有显示字符串硬编码值的警告

java - 什么是 Http2 中的 GoAway 框架以及它如何链接到重定向?

java - 如何使用 ssjs 数组变量设置组合框的值?

python - Pandas 中非唯一索引的性能影响是什么?

java - DBCP 池出现错误 : "java.sql.SQLException: Configuration file not found"