关键字:
JDBC 数据库元数据 参数元数据 结果集元数据、人大金仓、KingbaseES
概述
获取数据库元数据
DatabaseMetaData类的getTable(),getColumns()方法的使用,以及参数传递问题
1.获取DatabaseMetaData实例:
Connection conn = DriverManager.getConnection(url, username, password);
DatabaseMetaData dbmd = conn.getMetaData();
获取数据库属性的方法
//获取数据库名称
dbmd.getDataBaseProductName()
//获取数据库版本
dbmd.getDatabaseProductVersion()
//获取数据库驱动
dbmd.getDriverName()
//获取驱动版本
dbmd.getDriverVersion()
//获取数据库用户名
dbmd.getUserName()
//获取数据库表结构:可以获取某一个具体的表,或者模糊获取多个数据库表
ResultSet rs = dbmd.getTables(String catalog, String schemaPattern, String tableNamePattern, String types[]);
catalog: 要获得表所在的编目(获取所连接的数据库的名称)
schemaPattern:要获得表所在的模式
tableNamePattern:数据表的表达式(数据表名称)
types[]: 数据表的类型 可能的类型为"Table","VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYSNONYM"
不同类型的数据库,例如Oracle数据库,MySql数据库,PostgreSql数据库具体所传的参数不一样
例如PostgreSql数据库:
dbmd.getTables(conn.getCatalog(), "public", "tableName", "new String[]{"TABLE"}");
Oracle数据库:
dbmd.getTables(null, conn.getMetaData().getUserName(), "tableName", null); //conn.getMetaData().getUserName(): 获取数据库用户名
MySql数据库:
dbmd.getTables(null, conn.getCatalog(), "student", new String[]{"table"});
//获取数据库具体某个表的结构
ResultSet rs = dbmd.getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern);
catalog: 要获得表所在的编目
schemaPattern:要获得表所在的模式
tableNamePattern:数据表名称
columnNamePattern:数据列表达式
例如PostgreSql数据库:
dbmd.getColumns(conn.getCatalog(), "public", "tableName", null); //null表示查询所有列,public是固定的
Oracle数据库:
dbmd.getColumns(null, conn.getMetaData().getUserName(), "tableName", null);
MySql数据库:
dbmd.getColumns(null, conn.getCatalog(), "tableName", null);
获取 参数 元数据:
·ParameterMetaData pstmt.getParameterMetaData()--返回一个ParameterMetaData对象,它包含有关此PreparedStatement对象的每个参数标记的编号,类型和属性的信息
·int getParameterCount()---获取PreparedStatement对象中的参数的数量
//预编译sql语句
String sql = "insert into student(Sno, Sname, Ssex, Sage, Sdept) values(?, ?, ?, ?, ?)"
PreparedStatement pstmt = conn.prepareStatement(sql);
//获取预编译SQL语句的参数,并打印参数数量
ParameterMetaData pMetaData = pstmt.getParameterMetaData();
sout(pMetaData.getParameterCount());
获取结果集元数据:
·ResultSetMetaData getMetaData()---返回一个ResultSetMetaData对象,它包含查询结果集ResultSet对象的元数据
·int getColumnCount()---返回此ResultSet对象中的列数
·String getColumnName(int column)---获取指定列的名称
//预编译SQL语句并执行
String sql = "select * from student";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
或
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
//可以获取结果集的信息
rs.getObject(columnIndex) 或 rs.getObject(columnLabel);
rs.rs.getShort(columnIndex)或rs.getShort(columnLabel);
//获取查询结果集的元数据,并打印
ResultSetMetaData rMetaData = rs.getMetaData();
//打印列的相关信息
sout(rMetaData.getColumnType(columnIndex));
sout(rMetaData.getColumnTypeName(columnIndex));




