1. 程式人生 > >JDBC---元資料

JDBC---元資料

元資料

何為元資料?元資料為描述資料的資料,主要是描述屬性的資料的資訊。簡單的說就是關於資料的資料。而在jdbc的學習中獲取資料的定義,如資料庫、表、列的定義資訊,就要用到元資料。在jdbc中使用的元資料有三種:資料庫元資料、引數元資料、結果集元資料。進行元資料的獲取之前我們先來定義用來連線和關閉資料庫的工具類。

工具類

public class JdbcUtils {
	private static String url="jdbc:mysql://localhost:3306/jdbc_deom";
	private static String user="root";
	private static String password="root";
	
	/**
	 * 返回連線
	 * @return
	 */
	public static Connection getConnection(){
		try {
			//註冊連線驅動
			Class.forName("com.mysql.jdbc.Driver");
			//返回連線
			return DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			throw new RuntimeException(e);
		} 
	}
	
	/**
	 * 關閉所有連線
	 * @param conn
	 * @param stm
	 * @param rs
	 */
	public static void closeAll(Connection conn,Statement stm,ResultSet rs){
		try {
			if (rs!=null){
				rs.close();
				rs=null;
			}
			if (stm !=null){
				stm.close();
				stm=null;
			}
			if (conn !=null){
				conn.close();
				conn=null;
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}

資料庫元資料(DatabaseMetaData

建立表如下的表:

create table `Admin`( 
   `id` int(11) NOT NULL AUTO_INCREMENT , 
   `userName` varchar(20) , 
   `passWord` varchar(20) , 
   PRIMARY KEY (`id`)
 )

 通過連線物件的getMetaData()方法去獲取到資料庫元資料DatabaseMetaData物件,可以通過該物件獲取資料庫的url、驅動的名稱、驅動的版本、使用者名稱、資料庫的產品名稱等。

@Test
	public void test1() throws Exception {
		//獲取連線
		Connection conn = JdbcUtils.getConnection();
		//獲取資料庫的元資料
		DatabaseMetaData meta = conn.getMetaData();
		System.out.println("資料庫的url:"+meta.getURL());
		System.out.println("Driver的名稱:"+meta.getDriverName());
		System.out.println("使用者名稱:"+meta.getUserName());
		System.out.println("資料庫產品的名稱:"+meta.getDatabaseProductName());
		JdbcUtils.closeAll(conn, null, null);
	}

 引數元資料(ParameterMetaData)

通過PreparedStatement物件中的getParameterMetaData()來獲取該物件,該物件主要獲取sql語句中的資訊,如引數的個數(或者說佔位符的個數),在寫通用的DAO方法的時候,可以通過引數的個數來迭代,設定引數的值。

@Test
	public void test2() throws Exception {
		//獲取連線
		Connection conn = JdbcUtils.getConnection();
		//獲取引數的元資料
		String sql="select * from admin where userName=? and passWord=?";
		PreparedStatement pstm = conn.prepareStatement(sql);
		//獲取引數元資料
		ParameterMetaData pmd = pstm.getParameterMetaData();
		//獲取引數的個數(或者佔位符的個數)
		int count = pmd.getParameterCount();
		System.out.println(count);
		JdbcUtils.closeAll(conn, pstm, null);
		
	}

結果集元資料 (ResultSetMetaData)

該物件是通過執行查詢sql語句之後得到結果集物件(ResultSet),再通過結果集物件中的getMetaData()方法來獲取到我們想要的結果集元資料ResultSetMetaData,我們可以從該物件中獲取到查詢結果中的列數、列名、列的型別、表名等。

@Test
	public void test3() throws Exception {
		//獲取結果集元資料
		Connection conn =JdbcUtils.getConnection();
		String sql="select * from admin";
		PreparedStatement pstm = conn.prepareStatement(sql);
		//結果集
		ResultSet rs = pstm.executeQuery();
		//獲取結果集元資料
		ResultSetMetaData rmd = rs.getMetaData();
		//迭代
		while(rs.next()){
			//列數
			int columnCount = rmd.getColumnCount();
			for(int i=0;i<columnCount;i++){
				//獲取列的名稱
				String columnName =rmd.getColumnName(i+1);
				//獲取列的型別
				int type=rmd.getColumnType(i+1);
				//表名
				System.out.println(rmd.getTableName(i+1));
				//根據列的名稱從結果集裡面獲取值
				Object columnValue=rs.getObject(columnName);
				System.out.println(type+":"+columnName+":"+columnValue);
			}
		}
		JdbcUtils.closeAll(conn, pstm, rs);
	}