建立一個 maven 的專案,設定 pom.xml 的 dependency,利用 maven 下載 ojdbc6 的函式庫,並透過 ojdbc6 連入 oracle 完成 INSERT/UPDATE/SELECT/DELETE 基本操作
環境
Intellij IDEA 2021.1Oracle 19cOracle 資料庫中已建立資料表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 中加入
- <dependencies>
- <!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6 -->
- <dependency>
- <groupId>com.oracle.database.jdbc</groupId>
- <artifactId>ojdbc6</artifactId>
- <version>11.2.0.4</version>
- </dependency>
- </dependencies>
3. 專案上按右鍵,選 「Maven -> Reload project」
4. 在 App.java 寫入程式碼
比較重要的是,一定要有 Commit 這個動作,不然造成資料 lock 的問題,比方說,第一段程式會 INSERT 資料到 Oracle,但如果 INSERT 沒有 Commit,就會導致第二段的 Update 程式在「stUpdate.executeUpdate(sqlUpdate);」時卡住,因為資料還處於 lock 的狀態。
- package basic;
- import java.sql.*;
- public class App {
- public static void main(String[] args) throws SQLException {
- String url = "jdbc:oracle:thin:@192.168.1.113:1521/ORCLPDB1";
- String uid = "yu";
- String pw = "qwe";
- // 初始化驅動
- // Class.forName("oracle.jdbc.driver.OracleDriver");
- // 根據連線字串、uid、pw,生成連線物件
- Connection conn = DriverManager.getConnection(url, uid, pw);
- System.out.println(conn.isClosed());
- if(conn == null){
- System.out.println("fail");
- } else {
- System.out.println("succ");
- }
- conn.close();
- // 看起來連線關閉後重新打開的方式是再重新 DriverManager.getConnection(url, uid, pw); 拿一次連線的樣子
- // conn.close();
- // Connection conn = DriverManager.getConnection(url, uid, pw);
- // 生成連線物件
- conn = DriverManager.getConnection(url, uid, pw);
- String sqlInsert = "INSERT INTO person (name, email, age) values ('nameA', 'email1', 999) ";
- // 生成輔助執行 SQL 指令的物件,應該是類似 .net 的 SQLCommand 的東西
- Statement stInsert = conn.createStatement();
- // 執行 sql 指令並回傳新增資料的筆數
- int countInsert = stInsert.executeUpdate(sqlInsert);
- // commit 的動作 (非常重要,漏掉會導致資料 lock 的問題)
- conn.commit();
- System.out.println("插入 " + countInsert + " 筆資料");
- // 關閉物件 (關閉後 conn 還是開著的)
- stInsert.close();
- // 關閉 conn
- conn.close();
- conn = DriverManager.getConnection(url, uid, pw);
- String sqlUpdate = "UPDATE person SET email = 'nameA@gmail.com', age = 9 where name='nameA'";
- Statement stUpdate = conn.createStatement();
- int countUpdate = stUpdate.executeUpdate(sqlUpdate);
- conn.commit();
- System.out.println("修改 " + countUpdate + " 筆資料");
- stUpdate.close();
- conn.close();
- conn = DriverManager.getConnection(url, uid, pw);
- String sqlSelect = "SELECT * FROM person";
- Statement stSelect = conn.createStatement();
- ResultSet rs = stSelect.executeQuery(sqlSelect);
- while(rs.next()){
- String name = rs.getString("name");
- String email = rs.getString("email");
- int age = rs.getInt("age");
- System.out.println(name + " " + email + " " + age);
- }
- stSelect.close();
- conn.close();
- conn = DriverManager.getConnection(url, uid, pw);
- String sqlDelete = "DELETE FROM person";
- Statement stDelete = conn.createStatement();
- int countDelete = stDelete.executeUpdate(sqlDelete);
- conn.commit();
- System.out.println("刪除:" + countDelete + "筆");
- stDelete.close();
- conn.close();
- System.out.println("hello world");
- }
- }
沒有留言:
張貼留言