通过JDK API 获取数据库元数据(反射数据库)

来源:互联网 发布:简单sql注入实例 编辑:程序博客网 时间:2024/06/07 05:56



package org.fkjava.metadata;import java.sql.*;import org.fkjava.factory.ConnectionFactory;/** * 测试元数据 * */public class ResultSetMetaData_Test {public static void showMetadata(Connection con) throws SQLException {DatabaseMetaData md = con.getMetaData();//获取底层数据库的主版本号。System.out.println("getDatabaseMajorVersion:  "+ md.getDatabaseMajorVersion());//底层数据库的次版本号。System.out.println("getDatabaseMinorVersion:  "+ md.getDatabaseMinorVersion());// 获取此数据库产品的名称。System.out.println("getDatabaseProductName:  "+ md.getDatabaseProductName());// 获取此数据库产品的版本号。System.out.println("getDatabaseProductVersion:  "+ md.getDatabaseProductVersion());//获取此数据库的默认事务隔离级别。System.out.println("getDefaultTransactionIsolation:  "+ md.getDefaultTransactionIsolation());//获取此 DBMS 的 URL。System.out.println("getURL:  " + md.getURL());// 获取此数据库的已知的用户名称。System.out.println("getUserName:  " + md.getUserName());}public static void showMeatdataOfTable(Connection con, String tablename)throws SQLException {Statement stm = con.createStatement();ResultSet rs = stm.executeQuery("select * from " + tablename);//可用于获取关于 ResultSet 对象中列的类型和属性信息的对象ResultSetMetaData rmsds = rs.getMetaData();//返回此 ResultSet 对象中的列数。int count = rmsds.getColumnCount();while(rs.next()){for (int i = 1; i <= count; i++) {// 获得列名和数据类型System.out.print("列名: " + rmsds.getColumnName(i) + "\t");System.out.print("数据类型: " + rmsds.getColumnTypeName(i) + "\t");System.out.print("字段值: " + rs.getObject(rmsds.getColumnName(i)));System.out.println();}System.out.println();}}public static void main(String[] args) {Connection con = null;try {con = ConnectionFactory.getConnection();System.out.println("获得数据信息:");showMetadata(con);System.out.println();System.out.println("获得表的数据信息:");showMeatdataOfTable(con, "tb_user");System.out.println();} catch (Exception e) {e.printStackTrace();} finally {ConnectionFactory.close(con, null, null);}}}