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
            System.out.print(rm.getColumnName(i+1)+"\t");
        }
        System.out.println();
        //输出表数据
        while(rs.next()){
            //输出一行
            for(int i=0;i
                System.out.print(rs.getObject(i+1)+"\t");
            }
            System.out.println();
        }
    }
}

你可能感兴趣的:(java--后台,mysql)