Java連接Oracle方法詳解 [轉]


Java連接Oracle方法詳解

導入驅動包

首先我們得導入Oracle的驅動包,在Oracle安裝目錄下可以找到,導入它。
具體位置是:app\計算機用戶名\product\11.2.0\dbhome_1\jdbc\lib
可能有的人不太一樣,但是大致都差不多,像我就沒有dbhome_1這個文件夾。我是直接進入的jdbc。
如下圖,

 

 選擇一個將它拖入到java項目中,選擇copy即可
在這里插入圖片描述
然后右鍵點擊它,單擊build path/構建路徑,點擊添加至構建路徑。完成后會出現一個引用的庫。如下圖
在這里插入圖片描述
ojdbc6.jar里面就有Oracle的驅動包。它能夠讓你的java程序驅動Oracle數據庫,像瀏覽器的Driver就可以控制瀏覽器一樣。

連接數據庫

一,加載類

使用Class.forName(String driverClass) 將Oracle的driver加載到內存,並與DriverManager建立聯系。當程序使用Oracle數據庫時,能夠在DriverManager中找到其驅動。
其參數有一個和三個兩種。對於driverClass,就是Oracle驅動程序類所在的包。如果你前面導入了,那driverClass就是 “oracle.jdbc.driver.OracleDriver” 。這樣就把OracleDriver加載到內存,並且將其內部的靜態代碼執行。

二,建立連接

DriverManager類,它可以使用戶程序和數據庫的驅動程序之間建立連接。通過getConnection()方法可以建立連接,如果連接成功返回Connection對象,失敗拋出SQLException異常。

getConnection(String url, String user, String password)

第一個參數使連接數據庫的url,第二個是用戶名,第三個參數是密碼。

url值一般為: “jdbc:oracle:thin:@localhost:1521:xe”
其中的localhost就是本機ip,可以將其修改為127.0.0.1或者是在命令行下輸入ipconfig后的ip。

1521是數據庫使用的端口,默認為1521。查看方法是:打開app\oracle\product\11.2.0\server\network\ADMIN\tnsnames.ora文件,其中的port就是端口號。

在這里插入圖片描述

xe是數據庫名,在Oracle命令行下使用語句select name from v$database; 查看,如圖:

 

 或者在剛才打開的文件中也能看到。

三,接收返回對象

上面我們說了DriverManager.getConnection() 返回的是Connection對象。那我們后續如果想要繼續操控已連接完的數據庫的話,比如增刪改查等,都需要操作它返回的Connection對象。
可能有人有些疑惑了。都已經連接上數據庫了,為什么非得使用Connection接口來操作數據庫,而不是直接在DriverManager中操作。其實我個人感覺如果世界上只有一種數據庫的話確實不太需要Connection,但數據庫種類太多了,每次使用java連接不同的數據庫都需要加載不同的driver。每個數據庫廠商都寫一個使用方法的話對於開發人員來說簡直是噩夢,那不如你們誰都別寫了,我Java自己規定一套使用方法,不管啥數據庫都得使用我這套方法。

Connection接口,代表與特定的數據庫的連接。
方法:
createStatement() 創建一個createStatement對象。

prepareStatement() 創建預處理對象prepareStatement。

isReadOnly() 查看當前Connection對象的讀取模式是否是只讀形式。

setReadOnly()

roolBack() 取消當前事務中進行的所有更改,並釋放connection對象的數據庫鎖。

close() 關閉並釋放資源。

四,發送SQL語句

Statement接口用於已經建立連接的基礎上向數據庫發送sql語句。
上面Connection接口的方法中就有一個 createStatement() 方法,就是用來生成Statement對象的。Connection更像是領導一樣,管理着整個數據庫的權限等,而Statment就是用來增刪改查的

方法:
execute(String sql) 執行給定的sql語句,返回結果有多種可能,如select結果集等。可以執行insert,delete,update等。

executeQuery(String sql) 只能用來查詢,返回單個的ResultSet對象。

查看操作結果集

ResultSet接口類似於一個臨時表,用來保存數據庫查詢操作所獲得的結果集。可以通過next方法將指向每一行數據的指針向下移動。還可以通過給定的函數來進行更改結果集。

接口方法如下:

 

 

 

 

代碼演示

連接代碼

package 嵌入式學習; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Conn { static String driverClassString = "oracle.jdbc.driver.OracleDriver"; static String urlString = "jdbc:oracle:thin:@localhost:1521:xe"; static String userString = "system"; static String passwordString = "123456"; public Connection getConnection() { Connection conn = null; try { Class.forName(driverClassString); conn = DriverManager.getConnection(urlString, userString, passwordString); System.out.println("連接成功!!!"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } } 

 

創建表

public void createTable(Connection conn) { try { Statement statement = conn.createStatement(); statement.execute("create table Family(Ffather varchar2(20), Fmather varchar2(20), Fson varchar2(20))"); System.out.println("表已創建"); } catch (SQLException e) { e.printStackTrace(); } } 

 

刪除表

public void deleteTable(Connection conn) { try { Statement statement = conn.createStatement(); statement.execute("drop table Family"); System.out.println("表已刪除!!"); conn.commit(); statement.close(); } catch (SQLException e) { e.printStackTrace(); } } 

 

添加信息

public void insertInfor(Connection conn) { try { Statement statement = conn.createStatement(); statement.execute("insert into Family values('haha', 'hengheng', 'heihei')"); statement.execute("insert into Family values('周星馳', '朱茵', '周星星')"); System.out.println("插入成功!!!"); conn.commit(); statement.close(); } catch (SQLException e) { e.printStackTrace(); } } 

 

查詢信息

public static void searchInfor(Connection conn) { ResultSet resultSet = null; try { Statement statement = conn.createStatement(); resultSet = statement.executeQuery("select * from Family"); while (resultSet.next()) { for (int i=1; i<=3; i++) { System.out.print(resultSet.getNString(i) + " "); //按照列號 } System.out.println(""); System.out.print(resultSet.getNString("Ffather") + " "); //按照列名 System.out.print(resultSet.getNString("Fmather") + " "); System.out.print(resultSet.getNString("Fson") + " "); System.out.println("\n"); } conn.commit(); statement.close(); resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } 

 

更新某一元組的列值

public void updateInfor(Connection conn) { try { Statement statement = conn.createStatement(); statement.execute("update Family set Fson='houhou' where Fson='heihei'"); conn.commit(); statement.close(); } catch (SQLException e) { e.printStackTrace(); } } 

 

轉自:https://blog.csdn.net/qq_43227036/article/details/105378296

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM