標籤:inpu rman ora manage cut ade localhost 取資料 結果
db.properties檔案
driverClassName=oracle.jdbc.OracleDriverurl=jdbc:oracle:thin:@localhost:1521:xeusername=systempassword=123456
db.properties
JDBCUtilProperties.java檔案
對資料連線和釋放資源的封裝,
package com.xdl.util;import java.io.IOException;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;public class JDBCUtilProperties { public static String driverClassName; public static String url; public static String username; public static String password; static { try { // 讀取 db.properties 檔案 ,路徑是相對於項目的路徑 InputStream inputStream = JDBCUtilProperties.class.getClassLoader(). getResourceAsStream("com/xdl/util/db.properties"); /* Properties 就是一個key value 結構 */ Properties pro = new Properties(); try { pro.load(inputStream); driverClassName = pro.getProperty("driverClassName"); url = pro.getProperty("url"); username = pro.getProperty("username"); password = pro.getProperty("password"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Class.forName(driverClassName); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /* 擷取資料庫 串連的方法 */ public static Connection getConnection(){ Connection conn = null; try { conn = DriverManager.getConnection(url, username, password); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } /* 釋放資源的方法 */ public static void releaseResource(Connection conn,Statement st,ResultSet rs){ if(rs != null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ rs = null; } } if(st != null){ try { st.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ st = null; } } if(conn != null){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ conn = null; } } }}JDBCUtilProperties.java
Test.java檔案
package com.xdl.test;import java.lang.reflect.Field;import java.sql.Connection;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import com.xdl.entity.User;import com.xdl.util.JDBCUtilProperties;public class Test1 { public static void main(String[] args) { //使用工具類 來擷取串連 Connection conn = null; Statement st = null; ResultSet rs = null; //建立串連 conn = JDBCUtilProperties.getConnection(); //獲得執行環境 try { st = conn.createStatement(); } catch (SQLException e) { e.printStackTrace(); } try { rs = st.executeQuery("select * from MyUser"); // while(rs.next()){ // 希望把資料 封裝成java的對象 User user = new User();// user.setId(rs.getInt("ID")); // user.setName(rs.getString("NAME"));// user.setPassword(rs.getString("PASSWORD"));// System.out.println(user); // } //上面這種方式是使用硬式編碼方式,也是最常用的方式。 //下面這種方式是採用軟編碼的方法, //利用java中的反射機制, //當前檔案分別建立和User類、查詢結果的反射, //然後再拼裝出上面的功能。 ResultSetMetaData rsmd = rs.getMetaData(); //獲得此ResultSet對象中列的數量 int columns = rsmd.getColumnCount(); String userStr = "com.xdl.entity.User"; List<User> datas = new ArrayList<User>(); //將游標從當前位置向前移一位 while (rs.next()) { // 裡面使用底層的資訊 封裝對象,獲得User類的Class對象 Class<?> u = Class.forName(userStr); Object obj = null; //獲得User對象 obj = u.newInstance(); Field[] fs = u.getDeclaredFields(); for (int i = 1; i <= columns; i++) { for (Field f : fs) { //判斷User對象是否有和MyUser表中相等的欄位 if (f.getName().toUpperCase().equals(rsmd.getColumnName(i))) { //當前欄位的類型名稱是NUMBER if (rsmd.getColumnTypeName(i).equals("NUMBER")) { //取消對User類的存取權限檢查 f.setAccessible(true); try { //向User對象中插入對應的值 f.setInt(obj, rs.getInt(rsmd.getColumnName(i))); } catch (IllegalArgumentException | IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //當前欄位的類型名稱是Varchar2 if (rsmd.getColumnTypeName(i).equals("VARCHAR2")) { f.setAccessible(true); try { f.set(obj, rs.getString(rsmd.getColumnName(i))); } catch (IllegalArgumentException | IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } //將當前UserObject Storage Service到一個User集合中 datas.add((User) obj); } for(User user:datas){ System.out.println(user); } } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (InstantiationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IllegalAccessException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } finally { JDBCUtilProperties.releaseResource(conn, st, rs); } }}Test.java
【JDBC】使用JDBC串連Oracle資料庫(JAVA反射機制)