建立一個 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"); } }
沒有留言:
張貼留言