JDBC元数据处理
数据库元数据参数元数据结果集元数据数据类型映射表JDBCDatabasemetadataAPIJDBCParameterMetaDataAPIJDBCResultSetMetaDataAPI
数据库元数据
KingbaseESJDBC的Databasemetadata接口可以向用户提供有关数据库的一些元信息,用户在建立了到数据库的一个连接之后,就可以获得该数据库的元数据信息。
例如:conn.getMetaData;
例8-获得数据库元数据
Connection connection = DriverManager.getConnection(url, "system",
"manager");
/* 创建数据库元数据对象 */
DatabaseMetaData metadata = connection.getMetaData();
/* 获取此元数据对象所产生的连接 */
Connection connection = metadata.getConnection();
/* 获取底层数据库的主版本号 */
int DatabaseMajorVersion = metadata.getDatabaseMajorVersion();
/* 获取此驱动程序的主 JDBC 版本号 */
int JDBCMajorVersion = metadata.getJDBCMajorVersion();
/* 获取数据库中表的元信息 */
String[] types = {"TABLE"};
ResultSet rs = getTables(null, null, "%", types);
while(rs.next()){
String tableName = rs.getString("TABLE_NAME");
String tableType = rs.getString("TABLE_TYPE");
String remarks = rs.getString("REMARKS");
System.out.println(tableName + " - " + tableType + " - " + remarks);
}
参数元数据
KingbaseESJDBC的ParameterMetaData接口可用于获取关于PreparedStatement对象中每个参数标记的类型和属性信息的对象。对于某些查询和驱动程序实现,由ParameterMetaData对象返回的数据在PreparedStatement执行前可能不可用。
例8-获取参数元数据
Connection connection = DriverManager.getConnection(url, "system",
"manager");
/* 创建 PreparedStatement 对象 */
PreparedStatement pstmt = connection.prepareStatement(
"insert into test values (?, ?, ?)");
/* 创建参数元数据对象 */
ParameterMetaData pmetaData = pstmt.getParameterMetaData();
/* 获取 PreparedStatement 对象中的参数的数量 */
int parameterCount = pmetaData.getParameterCount();
/* 获取第一个参数是否可以是带符号的数字。 */
boolean signed = pmetaData.isSigned(1);
...
结果集元数据
KingbaseESJDBC的ResultSetMetaData接口可用于获取关于ResultSet对象中列的类型和属性信息的对象。
例如:rs.getMetaData;
除标准接口外,还有私有接口可以判断列是否为隐含列。
结果集默认不会返回隐含列,即执行select*fromxxx时,不会返回隐含列的内容,需要显示指定查询列。
例8-获得结果集元数据
Connection connection = DriverManager.getConnection(url, "system",
"manager");
Statement stmt = connection.createStatement();
/* 创建 ResultSet 对象 */
ResultSet rs = stmt.executeQuery("select t1,t2 from test;");
/* 创建结果集元数据对象 */
ResultSetMetaData rmetaData = rs.getMetaData();
/* 获取 ResultSet 对象中的列数 */
int columnCount = rmetaData.getColumnCount();
/* 获取第一列的大小写是否有关系。 */
boolean caseSensitive = rmetaData.isCaseSensitive(1);
/* 获取第一列是否为隐含列 */
boolean columnInvisible = ((KbResultSetMetaData) rmetaData).isColumnInvisible(1);
...
数据类型映射表
int2 | 21 | Types.SAMLLINT | java.lang.Integer |
int4 | 23 | Types.INTEGER | java.lang.Integer |
oid | 26 | Types.BIGINT | java.lang.Long |
int8 | 20 | Types.BIGINT | java.lang.Long |
money | 790 | Types.DOUBLE | java.lang.Double |
numeric | 1700 | Types.NUMERIC | java.math.BigDecimal |
float4 | 700 | Types.REAL | java.lang.Float |
float8 | 701 | Types.DOUBLE | java.lang.Double |
char | 18 | Types.CHAR | java.lang.String |
bpchar | 1042 | Types.CHAR | java.lang.String |
varchar | 1043 | Types.VARCHAR | java.lang.String |
text | 25 | Types.VARCHAR | java.lang.String |
name | 19 | Types.VARCHAR | java.lang.String |
bytea | 17 | Types.BINARY | [B (byte[])] |
bool | 16 | Types.BIT | java.lang.Boolean |
bit | 1560 | Types.BIT | java.lang.Boolean |
date | 1082 | Types.DATE | java.sql.Date |
time | 1083 | Types.TIME | java.sql.Time |
timetz | 1266 | Types.TIME | java.sql.Time |
timestamp | 1114 | Types.TIMESTAMP | java.sql.Timestamp |
timestamptz | 1184 | Types.TIMESTAMP | java.sql.Timestamp |
refcursor | 1790 | Types.REF_CURSOR | java.sql.ResultSet |
json | 114 | Types.OTHER | org.postgresql.util.PGobject |
point | 600 | Types.OTHER | org.postgresql.geometric.PGpoint |
uuid | 2950 | Types.OTHER | java.util.UUID |
文章为作者独立观点,不代表股票交易接口观点