JDBC 擷取中繼資料DatabaseMetaData,databasemetadata
package org.data.jdbc;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;public class Jdbc {//資料庫連接地址private static final String url="jdbc:mysql://localhost:3306/data";//使用者名稱密碼private static final String user="root";private static final String pwd="123456";/*** * 資料庫查詢 * @throws ClassNotFoundException */public static void query() throws ClassNotFoundException{Connection conn=null;java.sql.PreparedStatement pst=null;ResultSet re=null;/* * DBC提供了DatabaseMetaData來封裝資料庫連接對應的資料庫資訊,通過Connection的getMetaData方法來擷取該對象。 * DatabaseMetaData介面通常資料庫驅動供應商完成實現,其作用是讓使用者瞭解資料庫的底層資訊。 * 使用該介面可以瞭解資料庫底層的實現,便於完成多個資料庫的相互切換。 */ DatabaseMetaData metadata=null;try {Class.forName("com.mysql.jdbc.Driver");conn=DriverManager.getConnection(url, user, pwd);metadata = conn.getMetaData();System.out.println("資料庫已知的使用者: "+ metadata.getUserName()); System.out.println("資料庫的系統函數的逗號分隔列表: "+ metadata.getSystemFunctions()); System.out.println("資料庫的時間和日期函數的逗號分隔列表: "+ metadata.getTimeDateFunctions()); System.out.println("資料庫的字串函數的逗號分隔列表: "+ metadata.getStringFunctions()); System.out.println("資料庫供應商用於 'schema' 的首選術語: "+ metadata.getSchemaTerm()); System.out.println("資料庫URL: " + metadata.getURL()); System.out.println("是否允許唯讀:" + metadata.isReadOnly()); System.out.println("資料庫的產品名稱:" + metadata.getDatabaseProductName()); System.out.println("資料庫的版本:" + metadata.getDatabaseProductVersion()); System.out.println("驅動程式的名稱:" + metadata.getDriverName()); System.out.println("驅動程式的版本:" + metadata.getDriverVersion()); System.out.println("驅動程式的版本:" + metadata.getTableTypes()); System.out.println("............................................"); pst= conn.prepareStatement("select * from customerinfo"); //擷取資料庫列 re=pst.executeQuery(); //資料庫列名 ResultSetMetaData data= re.getMetaData(); //getColumnCount 擷取表列個數 for(int i=1;i<=data.getColumnCount();i++){ //擷取列表 index 從1開始、列名、列類型、列的資料長度 System.out.println(data.getColumnName(i)+"\t"+data.getColumnTypeName(i)+"\t"+data.getColumnDisplaySize(i)); }} catch (SQLException e) {e.printStackTrace();}finally{closeConnection(conn, pst, re);} }/** * 關閉資料庫連結 * @param conn * @param pst * @param re */public static void closeConnection(Connection conn,PreparedStatement pst,ResultSet re){if(conn!=null)try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(pst!=null)try {pst.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(re!=null)try {re.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {try {query();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}