返回首页

gbase数据、南大通用产品文档:GBase8s不需现有的 Java 类创建不透明类型

更新日期:2024年09月11日

在此示例中,使用客户端上的 Java™ 类 MyCircle 在数据库服务器中创建一个名
为 ACircle 的固定长度的不透明类型。ACircle 不透明类型使用数据库服务器提供的缺省支
持函数:
import java.sql.*;

public class MyCircle
{
String dbname = "test";
String url = null;
Connection conn = null;

public static void main (String args[])
{
new MyCircle(args);
}

MyCircle(String args[])
{
System.out.println("----------------");
System.out.println("- Start - Demo 3");
System.out.println("----------------");

// -----------
// Getting URL

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 208 -

// -----------
if (args.length == 0)
{
System.out.println("\n***ERROR: connection URL must be provided " +
"in order to run the demo!");
return;
}
url = args[0];

// --------------
// Loading driver
// --------------
try
{
System.out.print("Loading JDBC driver...");
Class.forName("com.gbasedbt.jdbc.Driver");
System.out.println("ok");
}
catch (java.lang.ClassNotFoundException e)
{
System.out.println("\n***ERROR: " + e.getMessage());
e.printStackTrace();
return;
}

// ------------------
// Getting connection
// ------------------
try
{
System.out.print("Getting connection...");
conn = DriverManager.getConnection(url);
System.out.println("ok");
}
catch (SQLException e)
{
System.out.println("URL = '" + url + "'");

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 209 -

System.out.println("\n***ERROR: " + e.getMessage());
e.printStackTrace();
return;
}
// -------------------
// Setup UDT meta data
// -------------------
UDTMetaData mdata = null;
try
{
mdata = new UDTMetaData();
System.out.print("Setting fields in mdata...");
mdata.setSQLName("acircle");
mdata.setLength(24);
mdata.setFieldCount(3);
mdata.setFieldName(1, "x");
mdata.setFieldName(2, "y");
mdata.setFieldName(3, "radius");
mdata.setFieldType(1, com.gbasedbt.lang.IfxTypes.IFX_TYPE_INT);
mdata.setFieldType(2, com.gbasedbt.lang.IfxTypes.IFX_TYPE_INT);
mdata.setFieldType(3, com.gbasedbt.lang.IfxTypes.IFX_TYPE_INT);
// set class name if don't want to use the default name
// .class
mdata.setClassName("ACircle");
mdata.setJarFileSQLName("ACircleJar");
mdata.keepJavaFile(true);
System.out.println("ok");
}
catch (SQLException e)
{
System.out.println("***ERROR: " + e.getMessage());
return;
}

// --------------------------------------------------------
// create java file for UDT and install UDT in the database
// --------------------------------------------------------

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 210 -

UDTManager udtmgr = null;
try
{
udtmgr = new UDTManager(conn);

System.out.println("Creating .class/.java files - " +
"createUDTClass()");
String classname = udtmgr.createUDTClass(mdata); // generated
//java file is kept
System.out.println(" classname = " + classname);

System.out.println("\nCreating .jar file - createJar()");
String jarfilename = udtmgr.createJar(mdata,
new String[]{"ACircle.class"}); // jarfilename is
// .jar
// ie. acircle.jar

System.out.println("\nsetJarTmpPath()");
udtmgr.setJarTmpPath("/tmp");

System.out.print("\ncreateUDT()...");
udtmgr.createUDT(mdata,
"/vobs/jdbc/demo/tools/udtudrmgr/" + jarfilename, "ACircle", 0);
System.out.println("ok");
}
catch (SQLException e)
{
System.out.println("\n***ERROR: " + e.getMessage());
return;
}
System.out.println();


// ---------------
// Now use the UDT
// ---------------
try

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 211 -

{
String s = "drop table tab";
System.out.print(s + "...");
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(s);
stmt.close();
System.out.println("ok");
}
catch ( SQLException e)
{
// -206 The specified table (%s) is not in the database.
if (e.getErrorCode() != -206)
{
System.out.println("\n***ERROR: " + e.getMessage());
return;
}
System.out.println("ok");
}

executeUpdate("create table tab (c acircle)");

// test DEFAULT Input function
executeUpdate("insert into tab values ('10 10 10')");

// test DEFAULT Output function
try
{
String s = "select c::lvarchar from tab";
System.out.println(s);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(s);
if (rs.next())
{
String c = rs.getString(1);
System.out.println(" acircle = '" + c + "'");
}
rs.close();

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 212 -

stmt.close();
}
catch (SQLException e)
{
System.out.println("***ERROR: " + e.getMessage());
}
System.out.println();

executeUpdate("drop table tab");

// ------------------
// Closing connection
// ------------------
try
{
System.out.print("Closing connection...");
conn.close();
System.out.println("ok");
}
catch (SQLException e)
{
System.out.println("\n***ERROR: " + e.getMessage());
}

System.out.println("------------------");
System.out.println("- End - UDT Demo 3");
System.out.println("------------------");

}

使用本功能,您可以在用户数据库下新建表。
在“数据库导航”中,右键单击数据库下的“表”节点,在弹出菜单中选
择“新建表”菜单项,如下图所示:

GBaseDataStudio 管理工具手册
南大通用数据技术股份有限公司
- 41 -
图5- 360 新建表
选择新建表菜单项后,系统将打开表设计器,如下图所示:
图5- 361Express 引擎表属性
输入表属性,填写表的属性信息;

表名:表的名称。

描述:表的注释。

字符集:有utf8 和GBK 两个选项,默认utf8.

使用表级压缩:是否使用表级压缩,默认不选中。

数值类型压缩:表中数值类型列的压缩方式有三种,分别是0、1、5。0
代表不使用压缩;
1 代表对数字类型使用深度压缩;
5 代表对数字类型使用
轻度压缩。

字符类型压缩方式:表中字符串类型列的压缩方式有三种,分别是0、3、
5。0 代表不使用压缩;1 代表对字符串类型使用深度压缩;5 代表对字符

GBaseDataStudio 管理工具手册
- 42 -
南大通用数据技术股份有限公司
串类型使用轻度压缩。

创建为复制表:指定是否是复制表,默认不选中,为随机分布表。

创建为NOCOPIES 表:是否创建一张不带副本的表。
图5- 362 列属性
输入列属性,定义表的字段,选择数据类型,定义数据类型的长度等等。
单击“确定”按钮,您会发现“数据库导航”中已经显示出您所创建的表。

文字的 INTERVAL 段指定文字的 INTERVAL 值。每当您在语法图中看到对文
字的 INTERVAL 引用时,请使用此段。
语法
文字的 INTERVAL

数值的时间跨度

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1570

元素
描述
限制
语法
dd
天数
-10**10 < dd < 10**10
精确数值
fffff
秒的小数部分
0 ≤ fffff ≤ 9999
精确数值
hh
小时数
如果不是第一个,则 0 ≤
hh ≤ 23
精确数值
mi
分钟数
如果不是第一个,则 0 ≤
mi ≤ 59
精确数值
mo
月数
如果不是第一个,则 0 ≤
mo ≤ 11
精确数值
space
空格(ASCII
32)
要求正好 1 个空字符
文字的空格
ss
秒数
如果不是第一个,则 0 ≤
ss ≤ 59
精确数值
yyyy
年数
-10**10 < yyyy < 10**10
精确数值
用法
不像 DATETIME 文字那样,INTERVAL 文字可包括一元加号(+)或一元减号
( -)。如果您未指定加减号,则缺省值为加号。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1571
可由 INTERVAL 限定符指定第一个时间单位的精度。FRACTION 可有不超过 5
位数字的精度,除了 FRACTION 之外,第一个时间单位可有高达 9 位数字的精
度,如果您在 INTERVAL 列或变量的声明中指定了非缺省的精度的话。
下列示例展示文字的 INTERVAL 值:
INTERVAL (3-6) YEAR TO MONTH
INTERVAL (09:55:30.825) HOUR TO FRACTION
INTERVAL (40 5) DAY TO HOUR
INTERVAL (299995.2567) SECOND(6) TO FRACTION(4)
仅最后一个示例有非缺省的精度。要了解声明 INTERVAL 数据类型的精度的语
法以及每一时间单位的缺省值,请参阅 INTERVAL 字段限定符。