JDBC 使用批量插入的方式操作longtext、longblob类型的字段,插入的数据超过32K,字段值就会变成dat文件名,而单条操作字段值则正常,驱动包:gbase-connector-java-9.5.0.1-build1-bin.jar
驱动包:gbase-connector-java-9.5.0.1-build1-bin.jar
数据库版本:9.5.3.28.12509af27
使用批量提交,插入之后LONGTEXT、LONGBLOB字段值会变成T--1-1782994247-167481407-140437503252224.dat、T--1-1782994247-168814956-140437503252224.dat
public static void insert() {
String url = "jdbc:gbase://IP:5258/sysdb?autoReconnect=true&zeroDateTimeBehavior=round&transformedBitIsBoolean=true";
try {
Connection con = DriverManager.getConnection(url, "root", "123456");
PreparedStatement psmt = null;
String sql = "INSERT INTO test1 (id, name1, name2) VALUES (1, ?, ?)";
psmt = con.prepareStatement(sql);
con.setAutoCommit(false);
StringBuilder stringBuilder64 = new StringBuilder();
for (int i = 0; i < 65536; i++) {
stringBuilder64.append("A");
}
for (int i = 1; i <= 1; i++) {
if(i==1){
psmt.setString(1, stringBuilder64.toString());
psmt.setBytes(2, stringBuilder64.toString().getBytes());
}
psmt.addBatch();
}
psmt.executeBatch();
con.commit();
psmt.clearBatch();
con.setAutoCommit(true);
} catch (Exception e) {
e.printStackTrace();
}
}
如果不使用批量插入,LONGTEXT、LONGBLOB字段值就是正常的:AAAAAA……
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < 65536; i++) {
stringBuilder.append("A");
}
String sourceUrl = "jdbc:gbase://IP:5258/sysdb?autoReconnect=true&zeroDateTimeBehavior=round&transformedBitIsBoolean=true";
String sourceUser = "root";
String sourcePassword = "123456";
Connection sourceConn = null;
Connection targetConn = null;
PreparedStatement sourceStmt = null;
PreparedStatement targetStmt = null;
ResultSet rs = null;
try {
// 连接源数据库
sourceConn = DriverManager.getConnection(sourceUrl, sourceUser, sourcePassword);
sourceStmt = sourceConn.prepareStatement("INSERT INTO test1 (id, name1, name2) VALUES (2, ?, ?)");
sourceStmt.setString(1, stringBuilder.toString());
sourceStmt.setBytes(2, stringBuilder.toString().getBytes());
sourceStmt.execute();
System.out.println("Data transferred successfully.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
}
为什么会出现这种情况?
评论
请问一下,您用的驱动jar包和数据库版本都跟我的一致吗?
或者数据库服务器需要配置什么参数,才没有32k的这个限制?
尝试调整这个参数的值试试。
以下参数默认是注释的,我删除注释后,重启数据库后解决问题:
gbase_heap_data=512M
gbase_heap_temp=256M
gbase_heap_large=256M
gbase_buffer_insert=256M
gbase_buffer_hgrby=10M
gbase_buffer_distgrby=10M
gbase_buffer_hj=10M
gbase_buffer_sj=10M
gbase_buffer_sort=10M
gbase_buffer_rowset=10M
gbase_buffer_result=10M
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526