编写自己的JDBC框架
一、元数据介绍
元数据指的是”数据库”、”表”、”列”的定义信息。
1.1、DataBaseMetaData元数据
Connection.getDatabaseMetaData()获得代表DatabaseMetaData元数据的DatabaseMetaData对象。
DataBaseMetaData对象的常用方法:
- getURL():返回一个String类对象,代表数据库的URL。
- getUserName():返回连接当前数据库管理系统的用户名。
- getDatabaseProductName():返回数据库的产品名称。
- getDatabaseProductVersion():返回数据库的版本号。
- getDriverName():返回驱动程序的名称。
- getDriverVersion():返回驱动程序的版本号。
isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。
/** * @Method: testDataBaseMetaData * @Description: 获取数据库的元信息 * @Anthor:孤傲苍狼 * * @throws SQLException */ @Test public void testDataBaseMetaData() throws SQLException { Connection conn = JdbcUtils.getConnection(); DatabaseMetaData metadata = conn.getMetaData(); //getURL():返回一个String类对象,代表数据库的URL System.out.println(metadata.getURL()); //getUserName():返回连接当前数据库管理系统的用户名 System.out.println(metadata.getUserName()); //getDatabaseProductName():返回数据库的产品名称 System.out.println(metadata.getDatabaseProductName()); //getDatabaseProductVersion():返回数据库的版本号 System.out.println(metadata.getDatabaseProductVersion()); //getDriverName():返回驱动驱动程序的名称 System.out.println(metadata.getDriverName()); //getDriverVersion():返回驱动程序的版本号 System.out.println(metadata.getDriverVersion()); //isReadOnly():返回一个boolean值,指示数据库是否只允许读操作 System.out.println(metadata.isReadOnly()); JdbcUtils.release(conn, null, null); }
运行结果如下:
1.2、ParameterMetaData元数据
PreparedStatement.getParameterMetaData() 获得代表PreparedStatement元数据的ParameterMetaData对象。
Select * from user where name=? And password=?
ParameterMetaData对象的常用方法:
- getParameterCount(): 获得指定参数的个数
getParameterType(int param):获得指定参数的sql类型,MySQL数据库驱动不支持
/** * @Method: testParameterMetaData * @Description: 获取参数元信息 * @Anthor:孤傲苍狼 * * @throws SQLException */ @Test public void testParameterMetaData() throws SQLException { Connection conn = JdbcUtils.getConnection(); String sql = "select * from user wherer name=? and password=?"; //将SQL预编译一下 PreparedStatement st = conn.prepareStatement(sql); ParameterMetaData pm = st.getParameterMetaData(); //getParameterCount() 获得指定参数的个数 System.out.println(pm.getParameterCount()); //getParameterType(int param):获得指定参数的sql类型,MySQL数据库驱动不支持 System.out.println(pm.getParameterType(1)); JdbcUtils.release(conn, null, null); }
1.3、ResultSetMetaData元数据
ResultSet. getMetaData()获得代表ResultSet对象元数据的ResultSetMetaData对象。
ResultSetMetaData对象的常用方法:
- getColumnCount() 返回resultset对象的列数
- getColumnName(int column) 获得指定列的名称
getColumnTypeName(int column)获得指定列的类型
/** * @Method: testResultSetMetaData * @Description: 结果集的元数据 * @Anthor:孤傲苍狼 * * @throws Exception */ @Test public void testResultSetMetaData() throws Exception { Connection conn = JdbcUtils.getConnection(); String sql = "select * from account"; PreparedStatement st = conn.prepareStatement(sql); ResultSet rs = st.executeQuery(); //ResultSet.getMetaData()获得代表ResultSet对象元数据的ResultSetMetaData对象 ResultSetMetaData metadata = rs.getMetaData(); //getColumnCount() 返回resultset对象的列数 System.out.println(metadata.getColumnCount()); //getColumnName(int column) 获得指定列的名称 System.out.println(metadata.getColumnName(1)); //getColumnTypeName(int column)获得指定列的类型 System.out.println(metadata.getColumnTypeName(1)); JdbcUtils.release(conn, st, rs); }