标签:des style blog http io color ar os 使用
元数据指的是"数据库"、"表"、"列"的定义信息。
Connection.getDatabaseMetaData()获得代表DatabaseMetaData元数据的DatabaseMetaData对象。 DataBaseMetaData对象的常用方法:
 1     /**
 2     * @Method: testDataBaseMetaData
 3     * @Description: 获取数据库的元信息
 4     * @Anthor:孤傲苍狼
 5     *
 6     * @throws SQLException
 7     */ 
 8     @Test
 9     public void testDataBaseMetaData() throws SQLException {
10         Connection conn = JdbcUtils.getConnection();
11         DatabaseMetaData metadata = conn.getMetaData();
12         //getURL():返回一个String类对象,代表数据库的URL
13         System.out.println(metadata.getURL());
14         //getUserName():返回连接当前数据库管理系统的用户名
15         System.out.println(metadata.getUserName());
16         //getDatabaseProductName():返回数据库的产品名称
17         System.out.println(metadata.getDatabaseProductName());
18         //getDatabaseProductVersion():返回数据库的版本号
19         System.out.println(metadata.getDatabaseProductVersion());
20         //getDriverName():返回驱动驱动程序的名称
21         System.out.println(metadata.getDriverName());
22         //getDriverVersion():返回驱动程序的版本号
23         System.out.println(metadata.getDriverVersion());
24         //isReadOnly():返回一个boolean值,指示数据库是否只允许读操作
25         System.out.println(metadata.isReadOnly());
26         JdbcUtils.release(conn, null, null);
27     }
运行结果如下:
  
PreparedStatement.getParameterMetaData() 获得代表PreparedStatement元数据的ParameterMetaData对象。 Select * from user where name=? And password=? ParameterMetaData对象的常用方法:
 1     /**
 2     * @Method: testParameterMetaData
 3     * @Description: 获取参数元信息
 4     * @Anthor:孤傲苍狼
 5     *
 6     * @throws SQLException
 7     */ 
 8     @Test
 9     public void testParameterMetaData() throws SQLException {
10         Connection conn = JdbcUtils.getConnection();
11         String sql = "select * from user wherer name=? and password=?";
12         //将SQL预编译一下
13         PreparedStatement st = conn.prepareStatement(sql);
14         ParameterMetaData pm = st.getParameterMetaData();
15         //getParameterCount() 获得指定参数的个数
16         System.out.println(pm.getParameterCount());
17         //getParameterType(int param):获得指定参数的sql类型,MySQL数据库驱动不支持
18         System.out.println(pm.getParameterType(1));
19         JdbcUtils.release(conn, null, null);
20     }
ResultSet. getMetaData() 获得代表ResultSet对象元数据的ResultSetMetaData对象。 ResultSetMetaData对象的常用方法:
 1     /**
 2     * @Method: testResultSetMetaData
 3     * @Description: 结果集的元数据
 4     * @Anthor:孤傲苍狼
 5     *
 6     * @throws Exception
 7     */
 8     @Test
 9     public void testResultSetMetaData() throws Exception {
10         Connection conn = JdbcUtils.getConnection();
11         String sql = "select * from account";
12         PreparedStatement st  = conn.prepareStatement(sql);
13         ResultSet rs = st.executeQuery();
14         //ResultSet.getMetaData()获得代表ResultSet对象元数据的ResultSetMetaData对象
15         ResultSetMetaData metadata = rs.getMetaData();
16         //getColumnCount() 返回resultset对象的列数
17         System.out.println(metadata.getColumnCount());
18         //getColumnName(int column) 获得指定列的名称
19         System.out.println(metadata.getColumnName(1));
20         //getColumnTypeName(int column)获得指定列的类型
21         System.out.println(metadata.getColumnTypeName(1));
22         JdbcUtils.release(conn, st, rs);
23     }
系统中所有实体对象都涉及到基本的CRUD操作 所有实体的CUD操作代码基本相同,仅仅发送给数据库的SQL语句不同而已,因此可以把CUD操作的所有相同代码抽取到工具类的一个update方法中,并定义参数接收变化的SQL语句。 实体的R操作,除SQL语句不同之外,根据操作的实体不同,对ResultSet的映射也各不相同,因此可义一个query方法,除以参数形式接收变化的SQL语句外,可以使用策略模式由qurey方法的调用者决定如何把ResultSet中的数据映射到实体对象中。
定义一个JdbcUtils工具类,工具类负责获取数据库连接,释放资源,执行SQL的update和query操作,代码如下:
  1 package me.gacl.util;
  2 
  3 import java.io.InputStream;
  4 import java.sql.Connection;
  5 import java.sql.DriverManager;
  6 import java.sql.PreparedStatement;
  7 import java.sql.ResultSet;
  8 import java.sql.SQLException;
  9 import java.sql.Statement;
 10 import java.util.Properties;
 11 
 12 public class JdbcUtils {
 13 
 14     private static String driver = null;
 15     private static String url = null;
 16     private static String username = null;
 17     private static String password = null;
 18     
 19     static{
 20         try{
 21             //读取db.properties文件中的数据库连接信息
 22             InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
 23             Properties prop = new Properties();
 24             prop.load(in);
 25             
 26             //获取数据库连接驱动
 27             driver = prop.getProperty("driver");
 28             //获取数据库连接URL地址
 29             url = prop.getProperty("url");
 30             //获取数据库连接用户名
 31             username = prop.getProperty("username");
 32             //获取数据库连接密码
 33             password = prop.getProperty("password");
 34             
 35             //加载数据库驱动
 36             Class.forName(driver);
 37             
 38         }catch (Exception e) {
 39             throw new ExceptionInInitializerError(e);
 40         }
 41     }
 42     
 43     /**
 44     * @Method: getConnection
 45     * @Description: 获取数据库连接对象
 46     * @Anthor:孤傲苍狼
 47     *
 48     * @return Connection数据库连接对象
 49     * @throws SQLException
 50     */ 
 51     public static Connection getConnection() throws SQLException{
 52         return DriverManager.getConnection(url, username,password);
 53     }
 54     
 55     /**
 56     * @Method: release
 57     * @Description: 释放资源,
 58     *     要释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
 59     * @Anthor:孤傲苍狼
 60     *
 61     * @param conn
 62     * @param st
 63     * @param rs
 64     */ 
 65     public static void release(Connection conn,Statement st,ResultSet rs){
 66         if(rs!=null){
 67             try{
 68                 //关闭存储查询结果的ResultSet对象
 69                 rs.close();
 70             }catch (Exception e) {
 71                 e.printStackTrace();
 72             }
 73             rs = null;
 74         }
 75         if(st!=null){
 76             try{
 77                 //关闭负责执行SQL命令的Statement对象
 78                 st.close();
 79             }catch (Exception e) {
 80                 e.printStackTrace();
 81             }
 82         }
 83         
 84         if(conn!=null){
 85             try{
 86                 //关闭Connection数据库连接对象
 87                 conn.close();
 88             }catch (Exception e) {
 89                 e.printStackTrace();
 90             }
 91         }
 92     }
 93     
 94     /**
 95     * @Method: update