玩轉MySQL ------使用java獲取資料庫的原資訊
阿新 • • 發佈:2018-12-11
玩轉資料庫的元資訊操作,主要是兩個類:
1) DatabaseMetaData類: 包含驅動資訊、資料庫名、表名(檢視、儲存過程等)
通過con.getMetaData()可獲得一個DatabaseMetaData類物件
2) ResultSetMetaData類: 包含表結構相關的資訊,如:列(欄位)的個數、名字、型別
和屬性等資訊
通過rs.getMetaData()可獲得一個ResultSetMetaData類物件
一、接下來進行DatabaseMetaData的操作演示:
1.獲取MySQL等版本資訊:
@Test // DatabaseMetaData類的操作演示 public void DBMetaDemo() throws Exception { Connection conn = Conn4Utils.getConn();//獲取conn的工具類 DatabaseMetaData dm = conn.getMetaData(); System.out.println(dm.getDriverName()); System.out.println(dm.getDriverVersion()); System.out.println(dm.getDriverMajorVersion()); System.out.println(dm.getDriverMinorVersion()); System.out.println(dm.getMaxStatements()); System.out.println(dm.getJDBCMajorVersion()); System.out.println("---------1--------"); }
結果:
2.獲取資料庫名:
// /////如何獲取資料庫名////////
ResultSet rs = dm.getCatalogs();
while (rs.next()) {
String name = rs.getString("TABLE_CAT");
System.out.println(name);
}
結果:
PS: 型別"TABLE"可從API文件中的getTableTypes()方法中查到,開啟API,找到DatabaseMetaDate類:
找到方法getTables:
點開:
3.如何在已知資料庫名的情況下,獲取它當中的表名
使用getTables方法:
引數1和引數2都是資料庫名,之所以要兩個引數,是因為該函式要相容不同的資料庫,引數2可給正則的形式。引數3是表格
名,null為不用正則匹配,若取"%a%"代表只獲取名字中包含"a"的表格(檢視等),引數4是表格的型別如Table、View等
ResultSet rs3 = dm.getTables("abc", "abc", null, new String[] { "TABLE" });// 型別"TABLE"可從API文件中的getTableTypes()方法中查到 while (rs3.next()) { String str = rs3.getString("TABLE_NAME"); // 欄位名"TABLE_NAME"可從API文件中的getTables()方法中查到 System.out.println(str); }
結果:
4.獲取一個數據庫中表資訊
// 獲取一個數據庫中表資訊---寫死的---如果把資料庫名和表名寫成活的就可獲取任意資料庫與資料表
Statement st = conn.createStatement();
st.execute("use abc"); // execute()方法可以執行任意sql,包含: use aa, create
// database, create table, alter...
ResultSet rs2 = st.executeQuery(" select * from stud3");
while (rs2.next()) {
String str = rs2.getString(2);
System.out.println(str);
}
結果:
二、 ResultSetMetaData類的操作演示
1.跨庫查詢用"資料庫名.表名",這部分可用DBMetadata把它做活
同樣也是用ResultSet 的 rs.getMetaData()獲取元資料,然後獲取列,獲取表的資料。
@Test
// ResultSetMetaData類的操作演示
public void RSMetaDemo() throws Exception {
Connection conn = Conn4Utils.getConn();
Statement st = conn.createStatement();
String sql = "select * from abc.stud3"; // 跨庫查詢用"資料庫名.表名",這部分可用DBMetadata把它做活
ResultSet rs = st.executeQuery(sql);
// ※※※
ResultSetMetaData rsmd = rs.getMetaData();// 結果集元資料
int columns = rsmd.getColumnCount(); // 欄位數量/列數
// ///輸出表頭////
for (int i = 1; i <=columns; i++) {
String fieldName=rsmd.getColumnName(i);//jdbc中的列序號都是從1開始
System.out.print(fieldName+"\t");
}
System.out.println();
System.out.println("--------------------------");
while(rs.next()){
//輸出一行資料
for(int i=0;i<columns;i++){
String str = rs.getString(i+1);
System.out.print(str+"\t");
}
System.out.println();
}
}