返回首页

gbase数据、南大通用产品文档:GBase8a获取AUTO_INCREMENT 列值方法

更新日期:2024年09月11日

本示例实现了使用SELECT LAST_INSERT_ID()获取AUTO_INCREMENT 列的值。
示例如下:
package com.gbase.jdbc.simple;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1103

public class SampleLastInsertID {



private
static
final
String
URL
=
"jdbc:gbase://192.168.111.95:5258/test?user=sysdba&password=";

public static void main(String[] args) {


try {



(new SampleLastInsertID()).test();


} catch (Exception ex) {



}

}


public void test() throws Exception {


Connection conn = null;


try {



Class.forName("com.gbase.jdbc.Driver").newInstance();



conn = DriverManager.getConnection(URL);




Statement stmt = null;



ResultSet rs = null;



try {




// 创建Statement 对象




stmt = conn.createStatement();









// 创建表




stmt.executeUpdate("DROP TABLE IF EXISTS autoIncTutorial");




stmt.executeUpdate("CREATE TABLE autoIncTutorial ("






+ "priKey INT NOT NULL AUTO_INCREMENT, "






+ "dataField VARCHAR(64), PRIMARY KEY (priKey))");









// 插入一条数据






stmt.executeUpdate("INSERT INTO autoIncTutorial (dataField) "






+ "values ('Can I Get the Auto Increment Field?')");









// 使用LAST_INSERT_ID()获取自增一字段值




int autoIncKeyFromFunc = -1;




rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");




if (rs.next()) {





autoIncKeyFromFunc = rs.getInt(1);




} else {










}




rs.close();

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1104




System.out.println("Key returned from "






+ "'SELECT LAST_INSERT_ID()': " + autoIncKeyFromFunc);



} finally {




if (rs != null) {





try {






rs.close();





} catch (SQLException ex) {












}




}




if (stmt != null) {





try {






stmt.close();





} catch (SQLException ex) {












}




}



}


} catch (SQLException ex) {



// 处理错误



System.out.println("SQLException: " + ex.getMessage());



System.out.println("SQLState: " + ex.getSQLState());



System.out.println("VendorError: " + ex.getErrorCode());


} finally {



conn.close();


}

}
}

libpq 是GBase 8c 的C 应用程序接口。libpq 是一套允许客户程序向服务器服务进程发
送查询并且获得查询返回的库函数。同时也是其他几个GBase 8c 应用接口下面的引擎,如
ODBC 等依赖的库文件。本章给出两个示例,显示如何利用libpq 编写代码。

本节中描述下列“信息模式”视图:
tables
columns
sql_languages
server_info
为了接受长标识名称,视图中的大部分列被定义为具有很大的最大大小的 VARCHAR
数据类型。
表“信息模式”视图
tables 信息模式视图对您可以访问的每个表包含一行。它包含以下列。

数据类型
解释
table_schema
VARCHAR(32)
表所有者的名称
table_name
VARCHAR(128)
表或视图的名称

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 77 -

数据类型
解释
table_type
VARCHAR(128)
BASE TABLE 表示表,或者 VIEW 表示视

remarks
VARCHAR(255)
保留供将来使用

tables 视图中的可视行取决于您的特权。例如,如果您对表具有一种或多种特权
(例如,对一个或多个列的 Insert、Delete、Select、References、Alter、Index 或
Update 特权),或者如果将特权授予 PUBLIC,那么可以看到描述该表的行。
列“信息模式”视图


columns 信息模式视图对每个可访问列包含一行。它包含以下列。
表 41. 列信息模式视图的描述

数据类型
解释
table_schema
VARCHAR(128)
表所有者的名称
table_name
VARCHAR(128)
表或视图的名称
column_name
VARCHAR(128)
表或视图中列的名称
ordinal_position
INTEGER
列在其表中的位置
ordinal_position 值是一个顺序编号,
从 1 开始(表示第一列)。这是对
XPG4 的 GBase 8s 扩展。
data_type
VARCHAR(254)
列的数据类型名称,例如,CHARACTER
或 DECIMAL
char_max_length
INTEGER
字符数据类型的最大长度(以字节
计);其他情况为 NULL
numeric_precision
INTEGER
使用下列值之一:
精确数字数据类型(DECIMAL、INTEGER、
MONEY 和 SMALLINT)的总位数
近似数据类型(FLOAT 和 SMALLFLOAT)
的尾数精度(与机器相关)的位数
对于所有其他数据类型为 NULL。

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 78 -

数据类型
解释
numeric_prec_radix
INTEGER
使用下列值之一:
2 = 近似数据类型(FLOAT 和
SMALLFLOAT)
10 = 精确数字数据类型(DECIMAL、
INTEGER、MONEY 和 SMALLINT)
对于所有其他数据类型为 NULL
numeric_scale
INTEGER
对于 DECIMAL 和 MONEY 数据类型为小
数点右边的有效位数
对于 INTEGER 和 SMALLINT 类型为 0,
对于所有其他数据类型为 NULL
datetime_precision
INTEGER
对于 DATE 和 DATETIME 列为秒的小数
部分中的位数;其他情况为 NULL
此列是对 XPG4 的 GBase 8s 扩展。
is_nullable
VARCHAR(3)
指示列是否允许为 NULL 值;为 YES 或
NO
remarks
VARCHAR(254)
保留供将来使用

sql_languages 信息模式视图
sql_languages 信息模式视图对符合当前数据库服务器支持的标准的每个实例包含一
行。 sql_languages 视图包含以下列。

数据类型
解释
source
VARCHAR(254)
定义此 SQL 版本的组织
source_year
VARCHAR(254)
批准源文档的年份
conformance
VARCHAR(254)
服务器遵循的标准
integrity
VARCHAR(254)
指示这是否为完整性增强功能部件;
可为 YES 或 NO
implementation
VARCHAR(254)
标识供应商的 SQL 产品
binding_style
VARCHAR(254)
直接、模块或其他绑定样式
programming_lang
VARCHAR(254)
绑定样式适合的主语言

sql_languages 视图对于所有用户都完全可视。
server_info 信息模式视图
server_info 信息模式视图描述应用程序当前连接至的数据库服务器。它包含两列。

数据类型
解释
server_attribute
VARCHAR(254)
数据库服务器的属性
attribute_value
VARCHAR(254)
server_attribute 应用于当前数据库服务
器时的值

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 79 -

此视图中的每一行都提供了有关一个属性的信息。符合 X/Open 的数据库必须提供具
有关于数据库服务器的某些必需信息的应用程序。
server_info 视图包括以下 server_attribute 信息。
server_attribute
解释
identifier_length
用户定义的标识符的最大字节数
row_length
行中的最大字节数
userid_length
用户名中的最大字节数
txn_isolation
数据库服务器的初始事务隔离级别:
读取未落实(= 不带事务日志记录的数据库的缺省隔离级别;也
称为脏读取)
读取已落实(= 不符合 ANSI 但支持显式事务日志记录的数据库
的缺省隔离级别)
可序列化(= 符合 ANSI 标准的数据库的缺省隔离级别;也称为
可重复读)
collation_seq
数据库服务器采用的字符集排序 有可能是以下值: ISO 8859-1
EBCDIC
缺省 GBase 8s 表示法显示 ISO 8859-1。
server_info 视图对于所有用户都完全可视。


















GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 80 -
3 数据类型
为数据库中的表的每一列指定数据类型。数据类型精确地定义可在该列中存储的值的
种类。
这些主题描述内置和扩展数据类型、两种数据类型之间的强制转型和运算符优先级。