Java程序设计——集元数据(JDBC编程)

目录

一、DatabaseMetaData接口

二、ResultSetMetaData接口


集元数据是有关数据库和表结构的信息,如表、列、索引等,可以通过JDBC的DatabaseMetaData和ResultSetMetaData接口对这些信息进行获取

一、DatabaseMetaData接口

DatabaseMetaData接口主要用于获取数据库的相关信息,如表的列表,系统函数,数据库产品名及驱动类型等

DatabaseMetaData接口的对象是通过Connection接口的getMetaData()方法进行获取

DatabaseMetaData接口的方法可分两大类:

  • 返回值为boolean类型,用以检查数据库或驱动器是否支持某项功能
  • 返回值为String类型,用以获取数据库或驱动器本身的某些特征值
方法 功能
boolean supportsOuterJolns() 检查数据库是否支持外部连接
boolean supportsStoredProcedures() 检查数据库是否支持存储过程
String getURL() 返回用于连接数据库的URL地址
String getUserName() 获取当前用户名
String getDatabaseProductName() 获取数据库产品名
String getDatabaseProductVersion() 获取数据库版本号
String getDriverName() 获取用以连接的驱动类型名称
String getProductVersion() 获取用以连接的驱动器版本号
ResultSet getTypeInfo() 获取数据库中可能取得的所有数据类型的描述
import java.sql.*;

public class DatabaseMetaDataDemo {

//    DatabaseMetaData接口用于获取数据库的相关信息
//    DatabaseMetaData对象是通过Connection接口的getMetaData()方法进行获取

    private static String driver = "com.mysql.cj.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/de?serverTimezone=UTC&useSSL=false";
    private static String user = "root";
    private static String password = "root";

    public static void main(String[] args) {
        Connection connection = null;
        DatabaseMetaData databaseMetaData = null;
        try {
            Class.forName(driver);
            connection = DriverManager.getConnection(url,user,password); // 获取数据库连接对象
            databaseMetaData = connection.getMetaData();

            boolean storeProcedures = databaseMetaData.supportsStoredProcedures();
            System.out.println("检查数据库是否支持存储过程:"+storeProcedures);

            boolean outerJoins = databaseMetaData.supportsOuterJoins();
            System.out.println("检查数据库是否支持外部连接:"+outerJoins);

            String databaseProductName = databaseMetaData.getDatabaseProductName();
            System.out.println("获取数据库产品名:"+databaseProductName);

            String databaseProductVersion = databaseMetaData.getDatabaseProductVersion();
            System.out.println("获取数据库产品版本号:"+databaseProductVersion);

            String url = databaseMetaData.getURL();
            System.out.println("获取连接数据库的URL地址:"+url);

            String user = databaseMetaData.getUserName();
            System.out.println("获取连接数据库的用户名:"+user);

            String driverName = databaseMetaData.getDriverName();
            System.out.println("获取连接数据库的驱动类型名称:"+driverName);

            String driverVersion = databaseMetaData.getDriverVersion();
            System.out.println("获取连接数据库的驱动类型版本号:"+driverVersion);

            ResultSet rs = databaseMetaData.getTypeInfo();
            System.out.println("获取数据库中可能取得的所有数据类型的描述:"+rs);

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (connection != null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}

Java程序设计——集元数据(JDBC编程)_第1张图片


二、ResultSetMetaData接口

ResultSetMetaData接口是用来获取结果集的结构,如结果集的列数和列名等信息

方法 功能
int getColumnCount() 返回ResultSet对象中的列数
String getColumnName(int column) 获取指定列的名称
int getColumnType(int coulumn) 获取指定列的SQL类型
String getTableName(int column) 获取指定列所在表的名称
int getColumnDisplaySize(int column) 获取指定列的最大标准宽度,以字符为单位
boolean isAutoIncrement(int column) 指定是否为指定列进行编号,这些列仍然是只读的
int isNullable(int column) 指定指定列的值是否可以为null
boolean isSearchable(int column) 指定是否可以在where字句中使用指定的列
boolean isReadOnly(int column) 指定指定的列是否明确不可写入
import java.sql.*;

public class ResultSetMetaDataDemo {

//    ResultSetMetaData接口:包含查询后的结果集相关信息

    private static String driver = "com.mysql.cj.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/de?serverTimezone=UTC&useSSL=false";
    private static String user = "root";
    private static String password = "root";

    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            connection = DriverManager.getConnection(url,user,password);
            String sql = "SELECT * FROM tb_student";
            pstmt = connection.prepareStatement(sql);
            rs = pstmt.executeQuery();
            while(rs.next()){
                int no = rs.getInt(1);
                String name = rs.getString(2);
                System.out.println(no+"\t"+name);
            }

        //  通过ResultSetMetaData接口获取其元数据信息:
            ResultSetMetaData resultSetMetaData =  rs.getMetaData();
            int column = resultSetMetaData.getColumnCount();
            System.out.println("\n返回此ResultSet对象中的列数:"+column);

            String columnName = resultSetMetaData.getColumnName(2);
            System.out.println("获取指定列的名称:"+columnName);

            int sqlType = resultSetMetaData.getColumnType(2);
            System.out.println("检索指定列的SQL类型:"+sqlType);

            String tableName = resultSetMetaData.getTableName(2);
            System.out.println("获取指定列所在表的名称:"+tableName);

            int maxSize = resultSetMetaData.getColumnDisplaySize(2);
            System.out.println("指示指定列的最大标准宽度,以字符为单位:"+maxSize);

            boolean isAutoIncrement = resultSetMetaData.isAutoIncrement(2);
            System.out.println("指示是否自动为指定列进行编号,这样这些列仍然是只读的:"+isAutoIncrement);

            int isNull = resultSetMetaData.isNullable(2);
            System.out.println("指示指定列中的值是否可以为null:"+isNull);

            boolean isRead = resultSetMetaData.isReadOnly(2);
            System.out.println("指示指定的列是否明确不可写入:"+isRead);

        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            if (rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (pstmt != null){
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }

    }

}

Java程序设计——集元数据(JDBC编程)_第2张图片


你可能感兴趣的:(Java面向对象程序设计,大数据)