2021年7月28日 星期三

透過 ojdbc6 連 oracle,並進行基本操作

建立一個 maven 的專案,設定 pom.xml 的 dependency,利用 maven 下載 ojdbc6 的函式庫,並透過 ojdbc6 連入 oracle 完成 INSERT/UPDATE/SELECT/DELETE 基本操作


環境

    Intellij IDEA 2021.1
    Oracle 19c
    Oracle 資料庫中已建立資料表    
    CREATE TABLE "PERSON" ("NAME" VARCHAR2(100), "EMAIL" VARCHAR2(100), "AGE" NUMBER(*,0))

本文


1. IDEA 建立一個 project,其結構如下

程式入口的 main 方法在 app.java 中

 


2. 上 MVNRepository 查詢 ojdbc6 的 dependency

選這個版本單純是因為我看他 Last Release 的時間比較近而己



 

pom.xml 中加入

  1. <dependencies>
  2. <!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6 -->
  3. <dependency>
  4. <groupId>com.oracle.database.jdbc</groupId>
  5. <artifactId>ojdbc6</artifactId>
  6. <version>11.2.0.4</version>
  7. </dependency>
  8. </dependencies>

3. 專案上按右鍵,選 「Maven -> Reload project」


4. 在 App.java 寫入程式碼

比較重要的是,一定要有 Commit 這個動作,不然造成資料 lock 的問題,比方說,第一段程式會 INSERT 資料到 Oracle,但如果 INSERT 沒有 Commit,就會導致第二段的 Update 程式在「stUpdate.executeUpdate(sqlUpdate);」時卡住,因為資料還處於 lock 的狀態。

  1. package basic;
  2.  
  3. import java.sql.*;
  4.  
  5. public class App {
  6. public static void main(String[] args) throws SQLException {
  7. String url = "jdbc:oracle:thin:@192.168.1.113:1521/ORCLPDB1";
  8. String uid = "yu";
  9. String pw = "qwe";
  10.  
  11. // 初始化驅動
  12. // Class.forName("oracle.jdbc.driver.OracleDriver");
  13. // 根據連線字串、uid、pw,生成連線物件
  14. Connection conn = DriverManager.getConnection(url, uid, pw);
  15. System.out.println(conn.isClosed());
  16.  
  17. if(conn == null){
  18. System.out.println("fail");
  19. } else {
  20. System.out.println("succ");
  21. }
  22.  
  23. conn.close();
  24.  
  25. // 看起來連線關閉後重新打開的方式是再重新 DriverManager.getConnection(url, uid, pw); 拿一次連線的樣子
  26. // conn.close();
  27. // Connection conn = DriverManager.getConnection(url, uid, pw);
  28.  
  29. // 生成連線物件
  30. conn = DriverManager.getConnection(url, uid, pw);
  31. String sqlInsert = "INSERT INTO person (name, email, age) values ('nameA', 'email1', 999) ";
  32. // 生成輔助執行 SQL 指令的物件,應該是類似 .net 的 SQLCommand 的東西
  33. Statement stInsert = conn.createStatement();
  34. // 執行 sql 指令並回傳新增資料的筆數
  35. int countInsert = stInsert.executeUpdate(sqlInsert);
  36. // commit 的動作 (非常重要,漏掉會導致資料 lock 的問題)
  37. conn.commit();
  38. System.out.println("插入 " + countInsert + " 筆資料");
  39. // 關閉物件 (關閉後 conn 還是開著的)
  40. stInsert.close();
  41. // 關閉 conn
  42. conn.close();
  43.  
  44. conn = DriverManager.getConnection(url, uid, pw);
  45. String sqlUpdate = "UPDATE person SET email = 'nameA@gmail.com', age = 9 where name='nameA'";
  46. Statement stUpdate = conn.createStatement();
  47. int countUpdate = stUpdate.executeUpdate(sqlUpdate);
  48. conn.commit();
  49. System.out.println("修改 " + countUpdate + " 筆資料");
  50. stUpdate.close();
  51. conn.close();
  52.  
  53. conn = DriverManager.getConnection(url, uid, pw);
  54. String sqlSelect = "SELECT * FROM person";
  55. Statement stSelect = conn.createStatement();
  56. ResultSet rs = stSelect.executeQuery(sqlSelect);
  57. while(rs.next()){
  58. String name = rs.getString("name");
  59. String email = rs.getString("email");
  60. int age = rs.getInt("age");
  61. System.out.println(name + " " + email + " " + age);
  62. }
  63. stSelect.close();
  64. conn.close();
  65.  
  66. conn = DriverManager.getConnection(url, uid, pw);
  67. String sqlDelete = "DELETE FROM person";
  68. Statement stDelete = conn.createStatement();
  69. int countDelete = stDelete.executeUpdate(sqlDelete);
  70. conn.commit();
  71. System.out.println("刪除:" + countDelete + "筆");
  72. stDelete.close();
  73. conn.close();
  74.  
  75. System.out.println("hello world");
  76. }
  77. }

沒有留言:

張貼留言