元數據
1.數據庫元數據
package com.cn.metadata;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import org.junit.Test;
import com.cn.util.JdbcUtil;
public class Demo1 {
/**
* 1.數據庫元數據
* @throws Exception
*/
@Test
public void test1() throws Exception {
//獲取連接
Connection conn = JdbcUtil.getConnection();
//獲取數據庫元數據
DatabaseMetaData metaData = conn.getMetaData();//alt+shift+L 快速獲取方法返回值
/**
* 獲取數據庫元數據
*/
System.out.println(metaData.getUserName());
System.out.println(metaData.getURL());
System.out.println(metaData.getDatabaseProductName());
System.out.println(metaData.getDatabaseProductVersion());
System.out.println(metaData.getDriverVersion());
}
}
2.參數元數據
package com.cn.metadata;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import org.junit.Test;
import com.cn.util.JdbcUtil;
public class Demo1 {
/**
* 2.參數元數據
* @throws Exception
*/
@Test
public void test2() throws Exception {
//獲取連接
Connection conn = JdbcUtil.getConnection();
//sql
String sql = "SELECT * FROM dept where id=? and deptName=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
ParameterMetaData paraMetaData = pstmt.getParameterMetaData();
//獲取參數的個數
int count = paraMetaData.getParameterCount();
System.out.println(count);//結果爲2
}
}
3.結果集元數據
package com.cn.metadata;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import org.junit.Test;
import com.cn.util.JdbcUtil;
public class Demo1 {
/**
* 3.結果集元數據
*/
@Test
public void test3() throws Exception {
//獲取連接
Connection conn = JdbcUtil.getConnection();
//sql
String sql = "SELECT * FROM dept";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
ResultSetMetaData resultMetaData = rs.getMetaData();
/**
* 得到結果集元數據(目標:通過結果集元數據,得到列的名稱)
*/
//迭代每一行結果
while(rs.next()){
//1.獲取列的個數
int columnCount = resultMetaData.getColumnCount();
//2.遍歷,獲取每一列的值
for(int i=1; i<=columnCount; i++){
//得到每一列的列名稱
String columnName = resultMetaData.getColumnName(i);//從1開始
//獲取該行對應的列的值
Object columnValue = rs.getObject(columnName);
System.out.print(columnName + "=" + columnValue + ", ");
}
System.out.println();
}
}
}
package com.cn.util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* jdbc的工具類
* @author liuzhiyong
*
*/
public class JdbcUtil {
private static String url = null;
private static String user = null;
private static String password = null;
private static String driverClass = null;
/**
* 靜態代碼塊(只調用一次)
*/
static{
try {
//讀取db.properties文件
Properties properties = new Properties();
/**
* 使用類路徑的讀取方式
* / 斜槓表示classpath的根目錄
* 在java項目下,classpath的根目錄從bin目錄開始
* 在web項目下,classpath的根目錄從WEB-INF/classes目錄開始
*/
InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
properties.load(in);
//讀取信息
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
driverClass = properties.getProperty("driverClass");
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
System.out.println("驅動程序註冊出錯!");
}
}
/**
* 獲取連接對象的方法
*/
public static Connection getConnection(){
try {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 釋放資源的重載方法
*/
public static void close(Connection conn, Statement stmt, ResultSet rs){
//關閉資源(順序:後打開,先關閉)
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
System.out.println("ResultSet關閉失敗!");
throw new RuntimeException(e);
}
}if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
System.out.println("Statement關閉失敗!");
throw new RuntimeException(e);
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
System.out.println("Connection關閉失敗!");
throw new RuntimeException(e);
}
}
}
/**
* 釋放資源的重載方法
*/
public static void close(Connection conn, Statement stmt){
//關閉資源(順序:後打開,先關閉)
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
System.out.println("Statement關閉失敗!");
throw new RuntimeException(e);
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
System.out.println("Connection關閉失敗!");
throw new RuntimeException(e);
}
}
}
}