日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

利用JDBC连接Oracle数据库

發布時間:2024/4/15 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用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.getConnection(“連接數據庫的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的連接程序:
  • 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對數據庫進行操作了,具體的查詢,插入,刪除,更新操作如下
  • 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?{????
  • ? ??//?插入數據的sql語句?
  • ????????????String?sql?=?"INSERT?INTO?staff(name,?age,?sex,address,?depart,?worklen,wage)"????
  • ????????????????????+?"?VALUES?('Tom1',?32,?'M',?'china','Personnel','3','3000')"; ? ? ?
  • ????????????//?創建用于執行靜態sql語句的Statement對象 ? ?????
  • ????????????st?=?(Statement)?conn.createStatement(); ??
  • ? ? ? ? ? ? //?執行插入操作的sql語句,并返回插入數據的個數?? ?
  • ????????????int?count?=?st.executeUpdate(sql);?
  • ????????????//輸出插入操作的處理結果 ?????
  • ????????????System.out.println("向staff表中插入?"?+?count?+?"?條數據");?//輸出插入操作的處理結果?????
  • ????????????//關閉數據庫連接 ????
  • ????????????conn.close(); ? ??
  • ????????????????
  • ????????}?catch?(SQLException?e)?{????
  • ????????????System.out.println("插入數據失敗"?+?e.getMessage());????
  • ????????}????
  • ????}????
  • ????????
  • ????/*?更新符合要求的記錄,并返回更新的記錄數目*/????
  • ????public?static?void?update()?{????
  • //同樣先要獲取連接,即連接到數據庫?
  • ????????conn?=?getConnection(); ? ? ?
  • ????????try?{????
  • ? ??//?更新數據的sql語句?
  • ????????????String?sql?=?"update?staff?set?wage='2200'?where?name?=?'lucy'"; ? ?
  • ????????????//創建用于執行靜態sql語句的Statement對象,st屬局部變量? ??????
  • ????????????st?=?(Statement)?conn.createStatement();?????
  • ? ? ? ? ? ? //?執行更新操作的sql語句,返回更新數據的個數 ???
  • ????????????int?count?=?st.executeUpdate(sql); ?
  • ? ? ? ? ? ? ?//輸出更新操作的處理結果 ?? ?
  • ????????????System.out.println("staff表中更新?"?+?count?+?"?條數據"); ? ? ? ?
  • ? ? ? ? ? ? ?//關閉數據庫連接 ???
  • ????????????conn.close(); ? ??
  • ????????????????
  • ????????}?catch?(SQLException?e)?{????
  • ????????????System.out.println("更新數據失敗");????
  • ????????}????
  • ????}????
  • ????
  • ????/*?查詢數據庫,輸出符合要求的記錄的情況*/????
  • ????public?static?void?query()?{????
  • ????????//同樣先要獲取連接,即連接到數據庫 ?????
  • ????????conn?=?getConnection(); ? ?
  • ????????try?{??
  • ? ??//?查詢數據的sql語句???
  • ????????????String?sql?=?"select?*?from?staff"; ??
  • ? ??//創建用于執行靜態sql語句的Statement對象,st屬局部變量?
  • ????????????st?=?(Statement)?conn.createStatement(); ? ? ? ?
  • ?????????????//執行sql查詢語句,返回查詢數據的結果集???
  • ????????????ResultSet?rs?=?st.executeQuery(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?{????
  • ? ??//?刪除數據的sql語句
  • ????????????String?sql?=?"delete?from?staff??where?name?=?'lili'"; ? ?
  • ? ??//創建用于執行靜態sql語句的Statement對象,st屬局部變量
  • ????????????st?=?(Statement)?conn.createStatement(); ? ? ? ??
  • ? ? ? ? ? ??//?執行sql刪除語句,返回刪除數據的數量?
  • ????????????int?count?=?st.executeUpdate(sql); ? ?
  • ? ? ? ? ? ? //輸出刪除操作的處理結果??
  • ????????????System.out.println("staff表中刪除?"?+?count?+?"?條數據\n"); ? ? ? ??
  • ? ? ? ? ? ? ?//關閉數據庫連接??
  • ????????????conn.close(); ? ? ??
  • ????????????????
  • ????????}?catch?(SQLException?e)?{????
  • ????????????System.out.println("刪除數據失敗");????
  • ????????}????
  • ????????????
  • ????}????
  • ????????
  • ????/*?獲取數據庫連接的函數*/????
  • ????public?static?Connection?getConnection()?{???
  • //創建用于連接數據庫的Connection對象?
  • ????????Connection?con?=?null; ? ??
  • ????????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;?//返回所建立的數據庫連接?????
  • ????}????
  • } ? ?

  • 總結

    以上是生活随笔為你收集整理的利用JDBC连接Oracle数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。