Informix 数据库中的 Hibernate 批量插入(获取 sql 日志跟踪)

Posted

技术标签:

【中文标题】Informix 数据库中的 Hibernate 批量插入(获取 sql 日志跟踪)【英文标题】:Hibernate Batch Insert in Informix database (Getting sql log trace) 【发布时间】:2017-10-05 11:15:13 【问题描述】:

我正在尝试在 informix 数据库中使用 hibernate 批量插入和更新。 但我无法找到插入是否实际上是批处理的。是否需要设置任何属性来获取 sql 语句的日志。 eg:在mysql中,我们使用profileSQL=true 我尝试在连接 URL 中设置 SQLIDEBUG=filePath 但该文件不可读。有没有其他方法可以获取 sql 日志,以便我可以验证插入和更新是否是批处理的。

另外,什么informix 驱动程序版本可以正确批量插入和更新。在 MySql 中,我观察到 MySql 连接器 5.1.28 未正确批处理,而 5.1.18 正确批处理。 informix 有没有类似的问题?

【问题讨论】:

【参考方案1】:

要读取(解码)SQLIDEBUG 文件,您需要包含在 Informix CSDK 包中的工具。 在 Windows 上名为“sqliprt.exe”,在 Linux/Unix/everythingelse 上名为“sqliprint” 您可能已经在 IDS 服务器的 bin 目录中拥有它,因为 CSDK 通常与引擎一起安装。

一个简单的例子:

D:\Infx\work\Java>javac batchdec.java

D:\Infx\work\Java>del sqlitra*

D:\Infx\work\Java>java batchdec
        257     0.000
        258     0.000
        259     0.000
        260     0.000



D:\Infx\work\Java>which sqliprt
D:\infx\csdk410tc4\bin/sqliprt.exe

D:\Infx\work\Java>sqliprt -notimestamp -tuple sqlitrace1507202847283.0 > sqlitrace.txt

D:\Infx\work\Java>

“sqlitrace.txt”应该是纯文本文件。如果您看到任何如下所示的 SQ_PUT 消息,则基本上意味着您正在进行批量更新:

----- sqlitrace.txt -----
.....
C->S (70)           
    SQ_ID
        1
    SQ_CURNAME
         "_ifxc0000000000001" [18]
    SQ_OPEN
    SQ_PUT
        Size of data row: 7
        # rows..........: 4
================================================================================
HEX DUMP:
       0:  c1 00 00 00 00 00 00 00 c1 00 00 00 00 00 00 00  ................
    0x10:  c1 00 00 00 00 00 00 00 c1 00 00 00 00 00 00 00  ................

================================================================================
    SQ_EOT

S->C (48)           
    SQ_INSERTDONE
        0
    Bigserial:0
    SQ_DONE
        Warning..: 0x10
        # rows...: 4
        rowid....: 261
        serial id: 0
    SQ_COST
        estimated #rows: 1
        estimated I/O..: 2
    SQ_EOT

而不是个人插入。 任何最近的 informix 驱动程序都应该与批处理操作一起使用。但我建议坚持使用最新的(4.10.9)

可以通过 Maven 或通过您的 IBM 下载站点找到它们。

分级

compile group: 'com.ibm.informix', name: 'jdbc', version: '4.10.9'

Maven

<dependency>
<groupId>com.ibm.informix</groupId>
<artifactId>jdbc</artifactId>
<version>4.10.9</version>
</dependency>

【讨论】:

我正在使用 jdbc informix 驱动程序我应该使用什么版本? jdbcifxjdbc 最新的是4.10.9,去那个。

以上是关于Informix 数据库中的 Hibernate 批量插入(获取 sql 日志跟踪)的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Hibernate 连接到 Informix

Hibernate/JDBC 为 Informix 数据库生成错误的 SQL

“发现:smallint,预期:整数” Hibernate 对 informix 数据库的验证短时间失败

如何限制 JPA 和 Informix 中的查询?

informix 数据库的分页

Informix 中的数据库别名