java--獲取數據庫元數據

元數據- DataBaseMetaData
元數據:數據庫、表、列的定義信息。
Connection.getDatabaseMetaData()
DataBaseMetaData對象
getURL():返回一個String類對象,代表數據庫的URL。
getUserName():返回連接當前數據庫管理系統的用戶名。
getDatabaseProductName():返回數據庫的產品名稱。
getDatabaseProductVersion():返回數據庫的版本號。
getDriverName():返回驅動驅動程序的名稱。
getDriverVersion():返回驅動程序的版本號。
isReadOnly():返回一個boolean值,指示數據庫是否只允許讀操作。
元數據- ParameterMetaData
PreparedStatement . getParameterMetaData()
獲得代表PreparedStatement元數據的ParameterMetaData對象。
ParameterMetaData對象
getParameterCount()
獲得指定參數的個數
getParameterType(int param)
獲得指定參數的sql類型
元數據- ResultSetMetaData
ResultSet. getMetaData()
獲得代表ResultSet對象元數據的ResultSetMetaData對象。
ResultSetMetaData對象
getColumnCount()
返回resultset對象的列數
getColumnName(int column)
獲得指定列的名稱
 getColumnTypeName(int column)
獲得指定列的類型

package cn.hncu.meta;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

import org.junit.Test;

import cn.hncu.pool.ConnUtils4;

public class MetaDataDemo {

    /*
     * 要點:
      操縱: 數據庫驅動的信息、數據庫名、數據表信息(名字、個數)  ---java.sql.DatabaseMetaData  <---通過con.getMetaData()獲得
      操縱: 表結構信息,如字段名、列數  ---java.sql.ResultSetMetaData  <--- 通過rs.getMetaData()獲得

     *數據庫的其它稱呼: Catlog,Schema   , Database
     */
    @Test
    public void DatabaseMetaDataDemo() throws Exception{
        Connection con=ConnUtils4.getConnection();
        DatabaseMetaData dm=con.getMetaData();
        System.out.println(dm.getDriverName());//MySQL Connector Java
        System.out.println(dm.getDatabaseMajorVersion()+"."+dm.getDatabaseMinorVersion());//5.6
        System.out.println(dm.getMaxStatements());//0:表示沒有限制資源
        System.out.println(dm.getJDBCMajorVersion()+",,,"+dm.getJDBCMinorVersion());//4,,,0

        //返回所有數據庫的名字
        ResultSet rs=dm.getCatalogs();
        while(rs.next()){
            System.out.println(rs.getString(1)+","+rs.getString("TABLE_CAT"));
        }
        //返回某個數據庫的表名
        //參數解析:第1和第2個都是數據庫的名字(2個,是爲兼容不同數據庫),第3個參數是查詢表名的過濾模式(null爲不過濾即查所有,"%a%"爲表名中包含字母'a'),
        //最後一個參數是表類型如"TABLE""VIEW"等(這些值可查看API中getTableTypes()方法)
        rs=dm.getTables("hncu", "hncu", null, new String[]{"TABLE","VIEW"});
        while(rs.next()){
            //字符串參數的具體取值參看API中getTables()
            System.out.println(rs.getString("TABLE_NAME")+","+rs.getString("TABLE_TYPE"));
        }
        //如果已知數據庫的名字,打開該數據庫。如果還知道某個表的名字,那麼可以操縱這個表
        String s1="abc";
        con.createStatement().execute("use "+s1);//SQL:use abc;
        String s2="book";
        ResultSet rs2 = con.createStatement().executeQuery("select * from "+ s2);
        while(rs2.next()){
            //如果已經列數n,就可輸出表格的所有數據
            int n = 4;
            for(int i=1;i<=n;i++){
                Object obj = rs2.getObject(i);
                System.out.print(obj+" ");
            }
            System.out.println();
        }
    }
    @Test //表結構信息
    public void ResultSetMetaDataDemo() throws Exception{
        //跨庫查詢
        Connection con=ConnUtils4.getConnection();//該版本的配置文件的url中是沒有數據庫名字的
        Statement st=con.createStatement();
        String dname="abc";//數據庫名
        String tname="book";//表名
        String sql="select * from " + dname+"."+tname;
        ResultSet rs=st.executeQuery(sql);
        ResultSetMetaData rm=rs.getMetaData();
        //獲取當前表格的列數
        int cols=rm.getColumnCount();
        System.out.println("列數:"+cols);

        //輸出當前表格的表頭
        for(int i=0;i<cols;i++){
            System.out.print(rm.getColumnName(i+1)+"\t");
        }
        System.out.println();
        //輸出表數據
        while(rs.next()){
            //輸出一行
            for(int i=0;i<cols;i++){
                System.out.print(rs.getObject(i+1)+"\t");
            }
            System.out.println();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章