建立一個 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");
}
}

沒有留言:
張貼留言