元数据,是指仅拥有Connection一个对象的情况下,分析得出数据库的所有信息。
DataBasemetadata:说明数据库的信息。
ResultSetMetadata:说明数据结果的类型信息。(核心)
如果要进行元数据分析,就必须要使用statement,preparedstatement
List<Map> list = run.query("select * from users",new MapListHandler());
其中list返回的结果形式如下:[{id="001",Name="Jack",pwd="ddd"},,,,,,]
List<Bean> list = run.query("select * from users",new BeanListHandler<User>(User.class));
[User=[id=dd],,,,,,]
将某个制定的数据库中的所有表及数据导出到excel中
-
用databaasemetadate分析数据库的数据
版本
厂家
有多少张表
-
@Test public void db() throws Exception{ Connection con = DataSourceUtils.getConn(); DatabaseMetaData dm = con.getMetaData(); /*ResultSet rs = dm.getCatalogs();//获取所有数据库的名称 while(rs.next()){ String name = rs.getString(1); System.out.println(name); } System.out.println("==========");*/ String dbName = dm.getDatabaseProductName();//获取数据库的名称 System.out.println(dbName); System.out.println("数据库中有多少张表:"); ResultSet rs2 = dm.getTables("sakila", "sakila", null,new String[]{"TABLE"});//第一个字段和第二个字段表示数据库名,第三个字段指定表名,如果为null表示所有表,第四个字段表示类型( "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM". ) while(rs2.next()){ String tableName = rs2.getString(3); System.out.println(tableName); } }
2. 用ResultSetMetadate分析结果集
此类事用来分析查询的结果集:
分析有多少列,列名,列的类型是什么?
@Test
public void db2() throws Exception{
Connection con = DataSourceUtils.getConn();
//转到sakila数据库中去
Statement st = con.createStatement();
st.execute("use sakila");
String sql = "select * from actor";
ResultSet rs = st.executeQuery(sql);
//对rs结果集进行分析
ResultSetMetaData rsmd = rs.getMetaData();
//获取多少列
int cols = rsmd.getColumnCount();
System.out.println(cols);
//获取每一个字段名
List<String> colNames = new ArrayList<String>();//保存所有字段
for(int i=0;i<cols;i++){
String colName = rsmd.getColumnName(i+1);
System.out.print(colName+"\t\t");
colNames.add(colName);
}
//获取数据
while(rs.next()){
for(String nm:colNames){
String val = rs.getString(nm);
System.out.print(val+"\t\t");
}
System.out.println();
}
con.close();
}