JDBC獲取元數據Database Meta Data
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 block
e.printStackTrace();
}
if(pst!=null)
try {
pst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(re!=null)
try {
re.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
query();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}