如何遍歷資料庫中的資料(在不知道資料庫名和表名的情況下)
玩轉資料庫的元資訊操作,主要是兩個類: * 1) DatabaseMetaData類: 包含驅動資訊、資料庫名、表名(檢視、儲存過程等) * 通過con.getMetaData()可獲得一個DatabaseMetaData類物件 * 2) ResultSetMetaData類: 包含表結構相關的資訊,如:列(欄位)的個數、名字、型別和屬性等資訊 * 通過rs.getMetaData()可獲得一個ResultSetMetaData類物件
@Test public void demo2() throws SQLException { Connection connection = ConnUtil4.getConn();//資料庫連線 Statement st = connection.createStatement(); DatabaseMetaData dm = connection.getMetaData();
///////如何獲取資料庫名//////// ResultSet rs = dm.getCatalogs(); while (rs.next()) { System.out.println("資料庫名為" + rs.getString("TABLE_CAT")); String dbName = rs.getString("TABLE_CAT");
///////如何在已知資料庫名的情況下,獲取它當中的表名//////// //引數1和引數2都是資料庫名,之所以要兩個引數,是因為該函式要相容不同的資料庫,引數2可給正則的形式。引數3是表格名,null為不用正則匹配,若取"%a%"代表只獲取名字中包含"a"的表格(檢視等),引數4是表格的型別如Table、View等 ResultSet rs2 = dm.getTables(dbName, dbName, null, new String[] { "TABLE" });//型別"TABLE"可從API文件中的getTableTypes()方法中查到 while (rs2.next()) {
String tbNm = rs2.getString("TABLE_NAME");//欄位名"TABLE_NAME"可從API文件中的getTables()方法中查到 System.out.println(tbNm); System.out.println("-----------------------------"); String sql = "select * from " + dbName + "." + tbNm; ResultSet rs3 = st.executeQuery(sql); ResultSetMetaData rsmd = rs3.getMetaData();//結果集元資料 int count = rsmd.getColumnCount();//欄位數量/列數
/////輸出表頭//// for (int i = 0; i < count; i++) { System.out.print(rsmd.getColumnName(i + 1) + " ");//jdbc中的列序號都是從1開始 } System.out.println();
//////輸出表資料/////// while(rs3.next()){
//輸出一行資料 for (int i = 0; i < count; i++) { System.out.print(rs3.getString(i+1) + " "); } System.out.println(); } }
} }