关键字:
KingbaseES、JDBC、人大金仓
如何更新结果集的值?
答:更新结果集的值需要先在创建语句对象时,设置结果集类型和并发类型。
结果集类型包括:
ResultSet.TYPE_FORWARD_ONLY(只可向前滚动); ResultSet.TYPE_SCROLL_INSENSITIVE(双向滚动,不及时更新);ResultSet.TYPE_SCROLL_SENSITIVE(双向滚动,并及时跟踪数据库更新)
并发类型包括:
ResultSet.CONCUR_READ_ONLY(只读)
ResultSet.CONCUR_UPDATABLE(可更新)
然后,我们可以对结果集进行插入、更新和删除操作。下图展示了,对TEACHER表的查询结果集进行插入、更新和删除操作的前后结果对比。
具体测试代码详见附录:问题1。
如何操作一个数组类型?
答:通过语句执行,返回的结果集中,数组是以Array类型形式存在的。需要,先取出Array对象,然后再根据具体的数据类型取出数据。
数组类型的插入、更新操作可以使用preparedStatement的占位符,或者直接在sql语句中带有数据。其中,使用占位符设置具体数据时,需要注意数据类型应该是Array类型。
数组类型读取时有两种方式:一种是使用Array对象,一种是使用ResultSet结果集。
下图展示了对数组类型数据的插入与查找的测试结果:
具体测试代码详见附录:问题2。
如何对大对象类型进行增删改查?
答:创建大对象类型Blob和Clob:Oracle兼容模式中create table可以直接使用Blob和Clob数据类型。PG兼容模式中,大对象类型存在一张系统表中,用户表存放实际存储地址,类型为oid。
- 查询
使用结果集的getBlob()和getClob()方法读取Blob和Clob类型数据。并可以分别使用getSubString(start,end)和new String (blob.getBytes(strart,end))方法将其以字符串方式显示。
- 插入
在 PreparedStatement 类中,可以使用setBlob()和setClob()方法把 Blob和 Clob对象当成参数传递给SQL语句。在 oracle 兼容模式下,通过 PrepareStatement 对象的 setBinaryStream、setBytes 和 setObject 可以设置语句中的 Blob 类型的参数; 使用 setCharacterStream、setString、setAsciiStream 和 setObject 方法可以设置 Clob 类型的参数。
插入大对象类型还有一种方式是使用:empty_clob(), empty_blob()(详见代码仓库中测试用例OracleBlobClobTest)
- 修改
通过查询数据库,从结果集中提取数据对象,按需求修改数据。(注意:查询数据库的sql语句一定要加上“for update”,否则会报未加锁的错误)
Clob对象数据可以使用setCharacterStream、setAsciiStream和setString方法更新Clob字段。它们分别以字符流、比特流和字符串从指定位置开始替换原值。
Blob对象数据可以使用,setBinaryStream和setBytes方法更新Blob字段。它们分别以比特流和比特数组从指定位置开始替换原值。
- 删除
使用delete语句进行删除
下图展示了对Clob和Blob类型数据操作的实践结果:
具体代码详见附录:问题3。
总结
- 学习KingbaseES客户端编程接口指南-JDBC,了解JDBC的连接、语句、结果集和元信息等基础结构。
- 在解答问题的同时,编写测试用例,可增强对问题的认识。
参考文档:
附录
问题1代码:
问题2代码:
问题3代码:




