esProc JDBC 获取表信息

概要

通过调用 java.sql.DatabaseMetaData 类中的各种方法,程序可以动态了解数据库,获取数据源连接到的数据库表结构等信息。本文主要介绍如何在 JAVA 中使用 DatabaseMetaData 类获取 esProc JDBC 表信息 (ctx、btx、csv、txt、xlsx、xls)。当 esProc JDBC 的 url 中 sqlfirst=plus(允许直接执行 SQL+ 语句)时,仅返回 ctx、btx 的表信息。

getTables()

描述:

使用 esProc JDBC 时根据 onlyServer 选项,返回本地或服务器主目录下的数据文件信息。

语法:

dmd.getTables(String catalog,String schema,String tableNamePattern,String[] types)

参数:

tableNamePattern 指出要返回表名与该参数匹配的表,为空时获取所有表信息。支持模糊查询,查找子目录的数据表时,不同操作系统需使用不同的文件分隔符号。

catalog/schema/types 连接 esProc JDBC 时没有 catalog,schema,types 属性概念,均赋值为 null

示例:

返回本地主目录下的数据文件:

public void getTablesTest() throws ClassNotFoundException, SQLException{

Connection con = null;

 //建立连接

 Class._forName_("com.esproc.jdbc.InternalDriver");

 con= DriverManager._getConnection_("jdbc:esproc:local://");

DatabaseMetaData dd=con.getMetaData();

 ResultSet rs =dd.getTables(null, null, null, null);

 while(rs.next()) {

 System.out.println(rs.getString("TABLE_NAME"));
  … …
 }
 … …
}

返回远程主目录下的数据文件:

public void getTablesTest() throws ClassNotFoundException, SQLException{

Connection con = null;

 //建立连接

 Class._forName_("com.esproc.jdbc.InternalDriver");

 con= DriverManager._getConnection_("jdbc:esproc:local://?onlyServer=true");

 DatabaseMetaData dd=con.getMetaData();

 ResultSet rs =dd.getTables(null, null, null, null);

 while(rs.next()) {

 System.out.println(rs.getString("TABLE_NAME"));
  … …
 }
 … …
}

getColumns()

描述:

返回 ResultSet 中表的字段信息。字段类型是一个与 java.sql.Types 中的类型常量匹配的整数。

语法:

dmd.getColumns(String catalog, String schemaPattern,String tableNamePattern, String columnNamePattern)

参数:

tableNamePattern 指定要获取字段信息的表名,为空时获取所有表的字段信息,查找子目录的数据表时,不同操作系统需使用不同的文件分隔符号。

columnNamePattern 指定列名称,为空时获取所有字段信息。支持模糊查询。

catalog/schemaPattern 连接 esProc JDBC 时没有 catalog/ _schemaPattern_ 属性概念,均赋值为 null

示例:

public void getColumnsTest() throws ClassNotFoundException, SQLException{

Connection con = null;

 //建立连接

 Class._forName_("com.esproc.jdbc.InternalDriver");

 con= DriverManager.getConnection_("jdbc:esproc:local://");

DatabaseMetaData dd=con.getMetaData();

 ResultSet rs =dd.getColumns(null, null, “test.txt”, null);

List<Map<String, Object>> tempList = new ArrayList<Map<String, Object>>();

 while(rs.next()) {

Map<String, Object> map = new HashMap<String, Object>();

 map.put("COLUMN_NAME", rs.getString("COLUMN_NAME"));

 map.put("DATA_TYPE", rs.getString("DATA_TYPE"));

 map.put("TYPE_NAME", rs.getString("TYPE_NAME"));

 map.put("COLUMN_SIZE", rs.getString("COLUMN_SIZE"));

 map.put("NULLABLE", rs.getString("NULLABLE"));

 tempList.add(map);
 … …
 }
 … …
}

注意:
如果在主目录(本地或者服务器)下配置了 meta.txt 文件,会返回 meta.txt 文件中配置的字段类型信息,否则会根据数据解析字段类型返回。meta.txt 的文件编码需要与集算器 JDBC 的编码一致。

meta.txt 格式如下,文件名和列名称不可修改:

1png

Table: 为 File 文件定义表名,访问 jdbc 时可直接使用 Table 查询。如:select * from tt1

File: 数据文件名称,需指定相对主目录下的全路径。使用子目录时,不同操作系统需使用不同的文件分隔符号。如 windows:ctx// 表 1.txt;linux:ctx/ 表 1.txt。

Column: 指定要设置字段类型的列名

Type:设置集算器的数据类型编号(0:默认,自动识别;1:32 位整数;2:64 位长整数;3:16 位短整数;4:大整数;5:32 位浮点数;6:64 位双精度浮点数;7:十进制长实数;8:日期;9:时间;10:日期时间;11:字符串;12:布尔值;62:字节序列)。