jdbc 表 meta data

import java.io.IOException;
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/st";
    // 用户名密码
    private static final String user = "root";
    private static final String pwd = "";

    /***
     * 数据库查询
     * 
     * @throws ClassNotFoundException
     * @throws IOException
     */
    public static void query() throws ClassNotFoundException, IOException {
    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 company_basic");

        // 获取数据库列
        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) + "\t" + data.getColumnClassName(i));
        }
        ResultSet resultSet = metadata.getTables(null, "%", "%", new String[] { "TABLE" });
        /*
         * while (resultSet.next()) { String
         * tableName=resultSet.getString("TABLE_NAME"); ResultSet rs =
         * metadata.getColumns(null, "%", tableName, "%");
         * System.out.println("表名:"+tableName+"\t\n表字段信息:");
         * while(rs.next()){
         * System.out.println("字段名:"+rs.getString("COLUMN_NAME")+"\t字段注释:"+
         * rs.getString("REMARKS")+"\t字段数据类型:"+rs.getString("TYPE_NAME")); }
         * }
         */
        ResultSet rs = metadata.getColumns(null, "%", "company_basic", "%");
        System.out.println("表名:" + "company_basic" + "\t\n表字段信息:");
        while (rs.next()) {
        System.out.println("字段名:" + rs.getString("COLUMN_NAME") + "\t字段注释:" + rs.getString("REMARKS")
                + "\t字段数据类型:" + rs.getString("TYPE_NAME"));
        }

    } 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) throws IOException {
    try {
        query();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }
}

猜你喜欢

转载自snowelf.iteye.com/blog/2258603
今日推荐