暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8a集群JDBC 批量提交rewriteBatchedStatements

生命之源 2022-01-05
1476

注意:

1、必须是insert values方式,不能是insert value方式,注意多了一个字母s。

2、insert values时的语句最后,不要有分号,否则会从第二行开始出语法错误。


普通入库方式

如果你有大量的单行数据要入库,可以采用如下几个方案

1、insert方式,每次一行

2、insert 方式,每次1000行,批量提交

3、输出成文件,load加载方式

其中第一种性能最差。而第二种,本质上类似如下的操作

set autocommit=0;
insert into XXX values ();
insert into XXX values ();
insert into XXX values ();
….
commit;

这种方案性能比逐行的性能要好很多。 另外一个方案就是

insert into XXX values (),(),(),();

也就是通过一个SQL语句,多个值,写到1个SQL里面,一次执行。

批量入库方式

gbase 的jdbc驱动,通过rewriteBatchedStatements=true参数,可以自动将Batch Insert 方式的批量提交,自动重写成多个values的格式,来提高性能。

但缺点也存在,如果你的数据里存在了单引号等,没有提前转义(比如转义成\’),会导致拼接出来的SQL语法错误。

public class TestBatchInsert {

	public static void main(String[] args) {
		Connection conn;
		try {
			conn = DriverManager.getConnection(
					"jdbc:gbase://192.168.56.1:52582/testdb?user=gbase&password=gbase20110531&rewriteBatchedStatements=true&profileSql=true");

			conn.setAutoCommit(false);
			String sql = "insert into t1 (id,id2,id3,id4) values (?,?,?,?)";
			PreparedStatement prest = conn.prepareStatement(sql);

			for (int id = 1; id <= 10; id++) {
				prest.setInt(1, id);
				prest.setInt(2, id);
				prest.setInt(3, id);
				prest.setInt(4, id);
				prest.addBatch();
			}
			prest.executeBatch();
			conn.commit();

			conn.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论