58元数据

元数据(MetaData):描述数据的数据
三类:
    数据库元数据    、参数元数据、结果集元数据
1.数据库元数据  DataBaseMetaData

    Connection -> DataBaseMetaData -> .

2.参数元数据  ParameterMetaData
    pstmt -> ParameterMetaData -> .

3.结果集元数据 ResultSetMetaData
    R

DataBaseMetaData对象可以通过java.sql.Connection对象获取。DataBaseMetaData接口的常见方法如表3.10所示。

方法

简介

String getDatabaseProductName()

 throws SQLException

获取数据库名

String getDatabaseProductVersion()

throws SQLException

获取数据库版本信息

String getDriverName()

throws SQLException

获取驱动名

String getURL()

throws SQLException

获取URL

String getUserName()

throws SQLException

获取用户名

ResultSet getPrimaryKeys(

String catalog, String schema, String table)

     throws SQLException;

获取指定表的主键信息。

参数:

catalog:类别信息,通常设为null;

schema:①如果是oracle数据库:大写的用户名;②如果是其它数据库:数据库名。也可以设为null。

table:指定大写的表名。

返回值是一个ResultSet,该结果集包含以下信息:

1表类别              2表模式

3表名称              4列名称主键名称

5主键中的序列号(值1表示主键中的第一列,值2表示主键中的第二列,...)

6主键的约束名称

表3.10  DataBaseMetaData接口方法

ParameterMetaData对象可以通过java.sql.PreparedStatement对象获取。ParameterMetaData接口的常见方法如表3.11所示。

select *from ..where id= ?  and name like ? ;

因为带参数的SQL 是通过pstmt执行的,因此需要从pstmt中获取参数元数据相关信息

方法

简介

int getParameterCount() throws SQLException;

获取SQL语句中,参数占位符的个数

String getParameterTypeName(int param)

throws SQLException;

获取第param个参数的类型名

表3.11  ParameterMetaData接口方法

ResultSetMetaData对象可以通过java.sql.ResultSet对象获取。ResultSetMetaData接口的常见方法如表3.12所示。

方法

简介

int getColumnCount() throws SQLException;

获取结果集中,包含列的数量

String getColumnName(int column)

throws SQLException;

获取结果集中,第column列的名称

String getColumnTypeName(int column)

throws SQLException;

获取结果集中,第column列的类型

很多数据库对元数据的支持问题:

①Oralce目前必须使用ojdbc7.jar作为驱动包;

②MySql必须在url中附加参数配置:

jdbc:mysql://localhost:3306/数据库名?generateSimpleParameterMetadata=true

esultSet -> ResultSetMetaData 

代码实现

1.数据库元数据

 58元数据

 代码:

public static void databsMetaData() {
        try {
            Class.forName(DRIVER);
            Connection connection= DriverManager.getConnection(URL,USERNAME,PASSWORD);
            DatabaseMetaData databaseMetaData=connection.getMetaData();

            String databaseProductName = databaseMetaData.getDatabaseProductName();
            System.out.println("databaseProductName"+databaseProductName);

            String databaseProductVersion = databaseMetaData.getDatabaseProductVersion();
            System.out.println("databaseProductVersion"+databaseProductVersion);

            String userName = databaseMetaData.getUserName();
            System.out.println("username:"+userName);


            String driverName = databaseMetaData.getDriverName();
            System.out.println("driverName"+driverName);

            String url = databaseMetaData.getURL();
            System.out.println("url"+url);

            System.out.println("====================");
            ResultSet rs = databaseMetaData.getPrimaryKeys(null, "goods", "STUDENT");
            while (rs.next()){
                Object tableLeibie=rs.getObject(1);
                Object tableMoshi = rs.getObject(2);
                Object tableName = rs.getObject(3);
                Object columName = rs.getObject(4);
                Object pkName = rs.getObject(6);
                System.out.println("表模式:"+tableLeibie +"======表类别:"+  tableMoshi+ "======表名:"+
                        tableName+"======主键列名:"+columName+"====pkName(主键的约束名字):"+pkName);
            }

        }catch (Exception e){
            e.printStackTrace();
        }

    }

2.参数元数据

58元数据

 

//参数元数据
    public static void parameterMetaData() {
        try {
            Class.forName(DRIVER);
            Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            PreparedStatement pstmt = connection.prepareStatement("select * from student where sno=? and sname = ?");
            //通过pstmr获取参数元数据
            ParameterMetaData parameterMetaData = pstmt.getParameterMetaData();
            int count=parameterMetaData.getParameterCount();
            System.out.println("sql语句参数个数为"+count);

            for(int i=1;i<=count;i++){
                String parameterTypeName = parameterMetaData.getParameterTypeName(i);
                System.out.println(parameterTypeName);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }

3.结果集元数据

58元数据

 public static void resultSetMetaData() {
        try {
            Class.forName(DRIVER);
            Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            PreparedStatement pstmt = connection.prepareStatement("select * from student");
            ResultSet rs=pstmt.executeQuery();
            ResultSetMetaData metaData = rs.getMetaData();
            int columnCount = metaData.getColumnCount();
            System.out.println("列的个数"+columnCount);

            System.out.println("===============");
            for(int i=1;i<=columnCount;i++){
                String columnName = metaData.getColumnName(i);
                String columnTypeName = metaData.getColumnTypeName(i);



                System.out.print(columnName+"\t"+columnTypeName+"\t");
            }
            System.out.println("===============");
            while(rs.next()){
                for(int i=1;i<=columnCount;i++){
                    System.out.print(rs.getObject(i)+"\t\t\t");
                }
                System.out.println();
            }
        }catch (Exception e ){
            e.printStackTrace();
        }
    }

上一篇:Java基础12:JavaDoc生成文档


下一篇:Java RMI机制讲解