【JDBC】使用JDBC串連Oracle資料庫(JAVA反射機制)

來源:互聯網
上載者:User

標籤: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反射機制)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.