利用JDBC連接Oracle數據庫

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?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數據庫連接成功!"); } } } 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?代碼轉載自: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; //返回所建立的數據庫連接 } }
發佈了51 篇原創文章 · 獲贊 17 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章