利用JDBC串連Oracle資料庫【轉】

來源:互聯網
上載者:User

標籤:

  1. JDBC是Sun公司制定的一個可以用Java語言串連資料庫的技術。

    一、JDBC基礎知識

    JDBC(Java Data Base Connectivity,java資料庫連接)是一種用於執行SQL語句的Java API,可以為多種關聯式資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。JDBC為資料庫開發人員提供了一個標準的API,據此可以構建更進階的工具和介面,使資料庫開發人員能夠用純 Java API 編寫資料庫應用程式,並且可跨平台運行,並且不受資料庫供應商的限制。

    1、跨平台運行:這是繼承了Java語言的“一次編譯,到處運行”的特點;

    2、不受資料庫供應商的限制:巧妙在於JDBC設有兩種介面,一個是面嚮應用程式層,其作用是使得開發人員通過SQL調用資料庫和處理結果,而不需要考慮資料庫的供應商;另一個是驅動程式層,處理與具體驅動程式的互動,JDBC驅動程式可以利用JDBC API建立Java程式和資料來源之間的橋樑。應用程式只需要編寫一次,便可以移到各種驅動程式上運行。Sun提供了一個驅動管理器,資料庫供應商——如MySQL、Oracle,提供的驅動程式滿足驅動管理器的要求就可以被識別,就可以正常工作。所以JDBC不受資料庫供應商的限制。

     


    JDBC API可以作為串連Java應用程式與各種關聯式資料庫的紐帶,在帶來方便的同時也有負面影響,以下是JDBC的優、缺點。優點如下:


    操作便捷:JDBC使得開發人員不需要再使用複雜的磁碟機調用命令和函數;
    可移植性強:JDBC支援不同的關聯式資料庫,所以可以使同一個應用程式支援多個資料庫的訪問,只要載入相應的驅動程式即可;
    通用性好:JDBC-ODBC橋接磁碟機將JDBC函數換成ODBC;
    物件導向:可以將常用的JDBC資料庫連接封裝成一個類,在使用的時候直接調用即可。

    缺點如下:


    訪問資料記錄的速度受到一定程度的影響;
    更改資料來源困難:JDBC可支援多種資料庫,各種資料庫之間的操作必有不同,這就給更改資料來源帶來了很大的麻煩

     


    二、JDBC串連資料庫的流程及其原理

    1、在開發環境中載入指定資料庫的驅動程式。例如,接下來的實驗中,使用的資料庫是Oracle,所以需要去下載Oracle支援JDBC的驅動程式(其實這個地方並不需要去官網上下載jdbc驅動,本地安裝的Oracle中就有,是一個ojdbc14.jar的檔案);而開發環境是MyEclipse,將下載得到的驅動程式載入進開發環境中(具體樣本的時候會講解如何載入)。

     


    2、在Java程式中載入驅動程式。在Java程式中,可以通過 “Class.forName(“指定資料庫的驅動程式”)” 方式來載入添加到開發環境中的驅動程式,例如載入Oracle的資料驅動程式的代碼為: Class.forName(“oracle.jdbc.driver.OracleDriver”)

     


    3、建立資料連線對象:通過DriverManager類建立資料庫連接對象Connection。DriverManager類作用於Java程式和JDBC驅動程式之間,用於檢查所載入的驅動程式是否可以建立串連,然後通過它的getConnection方法,根據資料庫的URL、使用者名稱和密碼,建立一個JDBC Connection 對象。如:Connection connection = DriverManager.geiConnection(“串連資料庫的URL", "使用者名稱", "密碼”)。其中,URL=協議名+IP地址(網域名稱)+連接埠+資料庫名稱;使用者名稱和密碼是指登入資料庫時所使用的使用者名稱和密碼。具體樣本建立Oracle的資料庫連接代碼如下:

    conn=DriverManager.getConnection(url, user, password);

     

     

    4、建立Statement對象:Statement 類的主要是用於執行靜態 SQL 陳述式並返回它所產生結果的對象。通過Connection 對象的 createStatement()方法可以建立一個Statement對象。例如:Statement statament = connection.createStatement(); 具體樣本建立Statement對象代碼如下:

    Statement statamentMySQL =connectMySQL.createStatement();

     

     

    5、調用Statement對象的相關方法執行相對應的 SQL 陳述式:通過execuUpdate()方法用來資料的更新,包括插入和刪除等操作,例如向staff表中插入一條資料的代碼:

    statement.excuteUpdate( "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)" + " VALUES (‘Tom1‘, 321, ‘M‘, ‘china‘,‘Personnel‘,‘3‘,‘3000‘ ) ") ;

    通過調用Statement對象的executeQuery()方法進行資料的查詢,而查詢結果會得到 ResulSet對象,ResulSet表示執行查詢資料庫後返回的資料的集合,ResulSet對象具有可以指向當前資料行的指標。通過該對象的next()方法,使得指標指向下一行,然後將資料以列號或者欄位名取出。如果當next()方法返回null,則表示下一行中沒有資料存在。使用範例程式碼如下:

    ResultSet resultSel = statement.executeQuery( "select * from staff" );

     


    6、關閉資料庫連接:使用完資料庫或者不需要訪問資料庫時,通過Connection的close() 方法及時關閉資料連線。

     


    三、JDBC應用樣本實驗

    實驗 步驟:
    S1、下載ojdbc14.jar驅動檔案,並將該檔案放到你的項目中去;
    S2、在MyEclipse中的項目中添加Oracle驅動程式:在項目名上右鍵-> Build Path ->Add External Archiver然後選擇你剛才放在項目中的檔案, 點確定即可。
    S3、開啟Oracle的各項服務,並在Oracle中建一張表。
    S4、編寫MyEclipse與Oracle的串連程式:
    [cpp] view plaincopyprint?<SPAN style="FONT-SIZE: 16px">import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.sql.* ;

    public class JDBC_Test {
    //orcl為oracle資料庫中的資料庫名,localhost表示串連原生oracle資料庫
    //1521為串連的連接埠號碼
    private static String url="jdbc:oracle:thin:@localhost:1521:orcl";
    //system為登陸oracle資料庫的使用者名稱
    private static String user="system";
    //manager為使用者名稱system的密碼
    private static String password="manager";
    public static Connection conn;
    public static PreparedStatement ps;
    public static ResultSet rs;
    public static Statement st ;
    //串連資料庫的方法
    public void getConnection(){
    try {
    //初始化驅動包
    Class.forName("oracle.jdbc.driver.OracleDriver");
    //根據資料庫連接字元,名稱,密碼給conn賦值
    conn=DriverManager.getConnection(url, user, password);

    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    }
    }
    //測試能否與oracle資料庫連接成功
    public static void main(String[] args) {
    JDBC_Test basedao=new JDBC_Test();
    basedao.getConnection();
    if(conn==null){
    System.out.println("與oracle資料庫連接失敗!");
    }else{
    System.out.println("與oracle資料庫連接成功!");
    }
    }
    }
    </SPAN>

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.sql.* ;

    public class JDBC_Test {
    //orcl為oracle資料庫中的資料庫名,localhost表示串連原生oracle資料庫
    //1521為串連的連接埠號碼
    private static String url="jdbc:oracle:thin:@localhost:1521:orcl";
    //system為登陸oracle資料庫的使用者名稱
    private static String user="system";
    //manager為使用者名稱system的密碼
    private static String password="manager";
    public static Connection conn;
    public static PreparedStatement ps;
    public static ResultSet rs;
    public static Statement st ;
    //串連資料庫的方法
    public void getConnection(){
    try {
    //初始化驅動包
    Class.forName("oracle.jdbc.driver.OracleDriver");
    //根據資料庫連接字元,名稱,密碼給conn賦值
    conn=DriverManager.getConnection(url, user, password);

    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    }
    }
    //測試能否與oracle資料庫連接成功
    public static void main(String[] args) {
    JDBC_Test basedao=new JDBC_Test();
    basedao.getConnection();
    if(conn==null){
    System.out.println("與oracle資料庫連接失敗!");
    }else{
    System.out.println("與oracle資料庫連接成功!");
    }
    }
    }

    S5、如果上述的串連已經建立,就可以利用JDBC中的Java API對資料庫進行操作了,具體的查詢,插入,刪除,更新操作如下:
    [cpp] view plaincopyprint?<SPAN style="FONT-SIZE: 16px">代碼轉載自:http://blog.csdn.net/cxwen78/article/details/6863696

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class JDBC_Test {
    // 建立靜態全域變數
    static Connection conn;

    static Statement st;

    public static void main(String[] args) {
    insert(); //插入添加記錄
    update(); //更新記錄資料
    delete(); //刪除記錄
    query(); //查詢記錄並顯示
    }

    /* 插入資料記錄,並輸出插入的資料記錄數*/
    public static void insert() {

    conn = getConnection(); // 首先要擷取串連,即串連到資料庫

    try {
    String sql = "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)"
    + " VALUES (‘Tom1‘, 32, ‘M‘, ‘china‘,‘Personnel‘,‘3‘,‘3000‘)"; // 插入資料的sql語句

    st = (Statement) conn.createStatement(); // 建立用於執行靜態sql語句的Statement對象

    int count = st.executeUpdate(sql); // 執行插入操作的sql語句,並返回插入資料的個數

    System.out.println("向staff表中插入 " + count + " 條資料"); //輸出插入操作的處理結果

    conn.close(); //關閉資料庫連接

    } catch (SQLException e) {
    System.out.println("插入資料失敗" + e.getMessage());
    }
    }

    /* 更新符合要求的記錄,並返回更新的記錄數目*/
    public static void update() {
    conn = getConnection(); //同樣先要擷取串連,即串連到資料庫
    try {
    String sql = "update staff set wage=‘2200‘ where name = ‘lucy‘";// 更新資料的sql語句

    st = (Statement) conn.createStatement(); //建立用於執行靜態sql語句的Statement對象,st屬局部變數

    int count = st.executeUpdate(sql);// 執行更新操作的sql語句,返回更新資料的個數

    System.out.println("staff表中更新 " + count + " 條資料"); //輸出更新操作的處理結果

    conn.close(); //關閉資料庫連接

    } catch (SQLException e) {
    System.out.println("更新資料失敗");
    }
    }

    /* 查詢資料庫,輸出符合要求的記錄的情況*/
    public static void query() {

    conn = getConnection(); //同樣先要擷取串連,即串連到資料庫
    try {
    String sql = "select * from staff"; // 查詢資料的sql語句
    st = (Statement) conn.createStatement(); //建立用於執行靜態sql語句的Statement對象,st屬局部變數

    ResultSet rs = st.executeQuery(sql); //執行sql查詢語句,返回查詢資料的結果集
    System.out.println("最後的查詢結果為:");
    while (rs.next()) { // 判斷是否還有下一個資料

    // 根據欄位名擷取相應的值
    String name = rs.getString("name");
    int age = rs.getInt("age");
    String sex = rs.getString("sex");
    String address = rs.getString("address");
    String depart = rs.getString("depart");
    String worklen = rs.getString("worklen");
    String wage = rs.getString("wage");

    //輸出查到的記錄的各個欄位的值
    System.out.println(name + " " + age + " " + sex + " " + address
    + " " + depart + " " + worklen + " " + wage);

    }
    conn.close(); //關閉資料庫連接

    } catch (SQLException e) {
    System.out.println("查詢資料失敗");
    }
    }

    /* 刪除符合要求的記錄,輸出情況*/
    public static void delete() {

    conn = getConnection(); //同樣先要擷取串連,即串連到資料庫
    try {
    String sql = "delete from staff where name = ‘lili‘";// 刪除資料的sql語句
    st = (Statement) conn.createStatement(); //建立用於執行靜態sql語句的Statement對象,st屬局部變數

    int count = st.executeUpdate(sql);// 執行sql刪除語句,返回刪除資料的數量

    System.out.println("staff表中刪除 " + count + " 條資料\n"); //輸出刪除操作的處理結果

    conn.close(); //關閉資料庫連接

    } catch (SQLException e) {
    System.out.println("刪除資料失敗");
    }

    }

    /* 擷取資料庫連接的函數*/
    public static Connection getConnection() {
    Connection con = null; //建立用於串連資料庫的Connection對象
    try {
    Class.forName("com.mysql.jdbc.Driver");// 載入Mysql資料驅動

    con = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/myuser", "root", "root");// 建立資料連線

    } catch (Exception e) {
    System.out.println("資料庫連接失敗" + e.getMessage());
    }
    return con; //返回所建立的資料庫連接
    }
    }
    </SPAN>

利用JDBC串連Oracle資料庫【轉】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.