数据库中元数据MetaData
直接演示如何使用
@Test //DatabaseMetaData,获取:驱动信息、数据库名、表名
public void DbMetaDemo() throws Exception{
Connection con = Conn4Utils.getConn();
DatabaseMetaData dm = con.getMetaData();//★★入口
System.out.println(dm.getDriverName());
System.out.println(dm.getDriverVersion());
System.out.println(dm.getMaxStatements());
System.out.println(dm.getJDBCMajorVersion());
//获取所有数据名
System.out.println("---------------------");
ResultSet rs = dm.getCatalogs();
while(rs.next()){
String name = rs.getString("TABLE_CAT");
System.out.println(name);
}
//获取数据库各个表的名字
System.out.println("---------------------");
//下面方法参数1和参数2:数据名,,参数3:表格名(可以采用正则方式如名称包含字符'a'的表名:'%a%')
rs = dm.getTables("abc", "abc", null, new String[]{"TABLE","VIEW"} );
while(rs.next()){
String name = rs.getString("TABLE_NAME");
System.out.println(name);
}
//获取指定数据库(名)中的指定表格(名)中的数据,,如果数据库名和表名采用上面的方式动态获取,那么就可做活
System.out.println("-------------");
con.createStatement().execute("use abc");
String sql = "select * from stud";
rs = con.createStatement().executeQuery(sql);
while(rs.next()){
System.out.println(rs.getString(1)+","+rs.getString(2));
}
}
@Test //ResultSetMetaData,获取:表结构信息(列的编号、类型和属性)
public void RsMetaDemo() throws Exception{
Connection con = Conn4Utils.getConn();
Statement st = con.createStatement();
//跨库查询,表名用: 数据名.表名
String sql = "select * from abc.book";
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();//★★入口
int colNums = rsmd.getColumnCount(); //获取表格的列数
//输出表头(第一列的字段名)
for(int i=0;i<colNums;i++){
String colName = rsmd.getColumnName(i+1);//参数序号从1开始
System.out.print(colName+"\t");
}
System.out.println();
//输出表数据(内容)
while(rs.next()){
for(int i=0;i<colNums;i++){
System.out.print(rs.getString(i+1)+"\t"); //从数据库表中读取数据,用getString()可以兼容所有类型,只是所读取的数据都变成了字符串,若要还原成原来的类型还要强转回去
}
System.out.println();
}
}