返回首页

gbase数据、南大通用产品文档:GBase8ax 版本的JDBC 驱动(jre16 及以上版本)时可以省去注册驱动,由

更新日期:2024年09月11日

java 虚拟机自动完整驱动注册。

PreparedStatement
在GBase
8a
server 中不支持预处理功能,PreparedStatement 是由驱动来
实现的。因此,驱动程序不支持getParameterMetaData()或getMetaData()等,
因为其需要客户端上具有完整的SQL 语法分析程序。
当服务器支持时,会使用服务端预处理语句和二进制编码的结果集。
当使用一个带有large 参数的服务器端预处理命令时要小心,这些参数是
通过setBinaryStream()、
setAsciiStream()、
setUnicodeStream()、
setBlob()
或setClob()设置的。
如果用户将large 参数修改为不带large 的参数后重新执
行语句,
那么此用户必需先调用clearParameters()并重置所有的参数。
原因如
下:

当设置参数时(在执行预处理语句前)
,驱动程序会将large 数据
out-of-band 发送到服务器端预处理语句;

一旦完成了这些,这个在客户端用于读取数据的流就会被关闭(按照
JDBC 规范)
,并且不能再次读取流;

如果一个参数从large 变为非large,
那么驱动必须重置服务器端的预
处理语句状态,这样就可以允许被改变成的参数替代先前的large 值
了。这会删除掉所有已经发送给服务器的large 数据,因此要求通过

GBase 8a 程序员手册JDBC 篇
南大通用数据技术股份有限公司

- 27 -
setBinaryStream()、 setAsciiStream()、setUnicodeStream()、
setBlob()或setClob()方法重发数据。
因此,如果用户想把一个参数的large 类型改成一个非large 的类型,那
么用户必须调用clearParameters()并在重新执行前再次设置准备好语句的所
有参数。

ResultSet
缺省情况下,
ResultSets 被完整地取回并存储在内存中。
在大多数情况下,
这是操作起来最有效的方式,
而且由于GBase 网络协议的设计这也更容易实现。
如果用户使用着拥有大量行或大数据的ResultSets,而且无法在JVM 内为所需
内存分配大量空间,可以通知驱动以“流”方式返回结果,一次一行。为了使
这个功能可用,用户需要按如下方式创建一个语句实例:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
这是个向前只读结果集,
它读取得容量以整数为单位。
MIN_VALUE 指示驱动
程序以逐行操作的方式形成“流”结果输出。
此后,任何用这个语句创建的结果集都按行检索。
使用这种方法有些要注意的地方,用户必须在当前连接上使用任何查询之
前,读出结果集中所有的行(或者关闭它)
,否则就是会抛出异常。
这些语句持有的锁(在GsDB 存储引擎中,无论它们是GsSYS 表级锁还是行
级锁)
,最早可以在语句完成的时候释放。
如果这个语句在一个事务的范围内,那么这些锁在事务结束时(这意味着
那条语句需要先完成)释放。和大多数其它数据库一样,语句不会完成直到所
有依赖于该语句的结果被读取或对于这个语句活跃的结果被关闭。
因此,当使用“流”结果时,如果用户想对那些被这个语句引用并产生结
果集的表保持并发访问,应当尽快地处理它们。

GBase 8a 程序员手册JDBC 篇


- 28 -

南大通用数据技术股份有限公司

ResultSetMetaData
可用于获取关于 ResultSet 对象中列的类型和属性信息的对象。

Statement
Statements 允许用户执行基本的SQL 查询并且通过后面将介绍的类
ResultSet 获得结果。
调用在对象Connection 上的createStatement()方法,可以创建一个
Statement 实例,而这个Connection 对象可以通过在前面介绍过的
DriverManager.getConnection()或DataSource.getConnection()方法获得。
一旦拥有了一个Statement 实例,就能调用executeQuery(String)方法执
行一个SELECT 查询。
更新数据库中的数据可以使用executeUpdate(String
SQL)方法,
该方法返
回由更新语句影响到的行数。
如果事先不知道SQL 语句将执行一个SELECT 操作还是一个UPDATE/INSERT
操作,
那么就可以使用execute(String
SQL)方法。
如果SQL 查询是一个SELECT,
该方法返回true,
如果是一个UPDATE/INSERT/DELETE 查询时返回false。
并且,
如果是一个SELECT 查询,
可以调用getResultSet()方法获得结果,
如果是一个
UPDATE/INSERT/DELETE 查询,
可以调用Statement 实例上的getUpdateCount()
方法获得被影响到的行数。

参数说明:cm_server 强起逻辑等待时延。在force_promote 被置为1 时,当数据库的某
一分片处于无主状态开始计时,等待该延迟时间后开始执行强起逻辑。
取值范围:整型,60~2147483647,单位为秒。修改后需要重启cm_server 才能生效。
默认值:0

参数说明:设置日期和时间值的显示格式,以及有歧义的输入值的解析规则。
这个变量包含两个独立的加载部分:输出格式声明(ISO、Postgres、SQL、German)
和输入输出的年/月/日顺序(DMY、MDY、YMD)。这两个可以独立设置或者一起设置。
关键字Euro 和European 等价于DMY;关键字US、NonEuro、NonEuropean 等价于MDY。
该参数属于USERSET 类型参数,请参考表GUC 参数设置方式中对应设置方法进行设
置。
取值范围:字符串
默认值:ISO,MDY
说明:

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1326
gs_initdb 会将这个参数初始化成与lc_time 一致的值。
设置建议:优先推荐使用ISO 格式。Postgres、SQL 和German 均采用字母缩写的形式
来表示时区,例如“EST、WST、CST”等。这些缩写可同时指代不同的时区,比如CST 可同
时代表美国中部时间(Central Standard Time (USA) UT-6:00)、澳大利亚中部时间(Central
Standard Time (Australia) UT+9:30)、中国标准时间(China Standard Time UT+8:00)、古巴
标准时间(Cuba Standard Time UT-4:00)。这种情况下在时区转化时可能会得不到正确的结
果,从而引发其他问题。