元数据MetaData

来源:互联网 发布:人工智能论坛 哪个好 编辑:程序博客网 时间:2024/06/07 21:38
  1. 定义
    在jdbc中获取数据库(数据库,数据表,字段)的定义信息
  2. 应用
    ☞数据库元数据
    // 获取连接    Connection conn = JdbcUtil.getConnection();    // 获取数据库元数据    DatabaseMetaData metaData = conn.getMetaData();    System.out.println(metaData.getUserName());    System.out.println(metaData.getURL());

☞参数元数据

Connection conn = JdbcUtil.getConnection();// SQLString sql = "select * from dept where deptid=? and deptName=?";// Object[] values = {"tom","888"};PreparedStatement pstmt = conn.prepareStatement(sql);// 参数元数据ParameterMetaData p_metaDate =pstmt.getParameterMetaData();// 获取参数的个数int count = p_metaDate.getParameterCount();

这里主要是利用了pstmt的预编译SQL的特性,然后利用pstmt来生成参数元数据,从而获取占位符的个数,也就是参数个数,但是这个其实并不 常用,因为如果要获取参数个数,完全可以通过参数数组的length来获取

☞结果集元数据

String sql = "select * from dept ";// 获取连接Connection conn = JdbcUtil.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql);ResultSet rs = pstmt.executeQuery();// 得到结果集元数据(目标:通过结果集元数据,得到列的名称)ResultSetMetaData rs_metaData = rs.getMetaData();// 迭代每一行结果while (rs.next()) {    // 1. 获取列的个数    int count = rs_metaData.getColumnCount();    // 2. 遍历,获取每一列的列的名称    for (int i=0; i<count; i++) {        // 得到列的名称        String columnName = rs_metaData.getColumnName(i + 1);        // 获取每一行的每一列的值        Object columnValue = rs.getObject(columnName);        // 测试        System.out.print(columnName + "=" + columnValue + ",");    }    System.out.println();}
  1. API
public class App {    //1. 数据库元数据    @Test    public void testDB() throws Exception {        // 获取连接        Connection conn = JdbcUtil.getConnection();        // 获取数据库元数据        DatabaseMetaData metaData = conn.getMetaData();        System.out.println(metaData.getUserName());        System.out.println(metaData.getURL());        System.out.println(metaData.getDatabaseProductName());    }    //2. 参数元数据    @Test    public void testParams() throws Exception {        // 获取连接        Connection conn = JdbcUtil.getConnection();        // SQL        String sql = "select * from dept where deptid=? and deptName=?";        // Object[] values = {"tom","888"};        PreparedStatement pstmt = conn.prepareStatement(sql);        // 参数元数据        ParameterMetaData p_metaDate = pstmt.getParameterMetaData();        // 获取参数的个数        int count = p_metaDate.getParameterCount();        // 测试        System.out.println(count);    }    // 3. 结果集元数据    @Test    public void testRs() throws Exception {        String sql = "select * from dept ";        // 获取连接        Connection conn = JdbcUtil.getConnection();        PreparedStatement pstmt = conn.prepareStatement(sql);        ResultSet rs = pstmt.executeQuery();        // 得到结果集元数据(目标:通过结果集元数据,得到列的名称)        ResultSetMetaData rs_metaData = rs.getMetaData();        // 迭代每一行结果        while (rs.next()) {            // 1. 获取列的个数            int count = rs_metaData.getColumnCount();            // 2. 遍历,获取每一列的列的名称            for (int i=0; i<count; i++) {                // 得到列的名称                String columnName = rs_metaData.getColumnName(i + 1);                // 获取每一行的每一列的值                Object columnValue = rs.getObject(columnName);                // 测试                System.out.print(columnName + "=" + columnValue + ",");            }            System.out.println();        }           }}
0 0