JDBC 是 Java 操作關係型數據庫的基石。本文提供一個基於 Oracle 的完整控制台交互式實戰項目,涵蓋增、刪、改、查、多線程併發控制等核心場景,代碼可直接落地項目參考。
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:SP";
Connection conn = DriverManager.getConnection(url, "test", "123");
oracle.jdbc.driver.OracleDriver(需 ojdbc*.jar)。jdbc:oracle:thin:@host:port:SID。String sql = "insert into examstudent values(fiowid.nextval, to_number(?), ?, ?, ?, ?, to_number(?))";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, grade); ps.setString(2, idCard); ps.setString(3, examCard);
ps.setString(4, name); ps.setString(5, location); ps.setString(6, score);
ps.executeUpdate();
PreparedStatement 防注入,序列 fiowid.nextval 生成主鍵。String sql = "select * from examstudent where " + (byIdCard ? "idcard = ?" : "examcard = ?");
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, input);
ResultSet rs = ps.executeQuery();
if (rs.next()) { /* 打印詳情 */ }
int rows = stmt.executeUpdate("delete examstudent where examcard = '" + examCard + "'");
public class Text_lianxi extends Thread {
public void run() { synchronized("") { yunxing(); } } // 類級鎖模擬窗口串行
public static void main(String[] args) {
new Text_lianxi().setName("窗口1").start();
// 可啟動窗口2、3 測試併發
}
}
Thread,synchronized("") 使用字符串常量池對象作鎖,模擬多窗口串行訪問數據庫。| 技術點 | 說明 |
|---|---|
| Statement vs PreparedStatement | 後者預編譯、防注入、批量執行效能高,生產首選 |
| 資源關閉順序 | ResultSet → Statement → Connection,放在 finally 塊 |
| 事務控制 | 示例未顯式開啟事務,默認自動提交;業務需求時用 conn.setAutoCommit(false) |
| 異常處理 | 捕獲 SQLException/ClassNotFoundException,打印堆棧便於排查 |
程序啟動後呈現控制台菜單:
DriverManager 為 HikariCP,配置最大/最小連接數、超時策略。application.yml,支持多環境。System.out.println,分級記錄 SQL、慢查詢、異常。package com.sp.test;
import java.sql.*; import java.util.*;
public class Text_lianxi extends Thread {
// 1. run() → yunxing()
// 2. shuru() / chaxun() / shanchu() 交互輸入
// 3. yunxing() 核心邏輯:連線 → 菜單 → CRUD → 關閉資源
// 4. main() 啟動線程
}
(完整代碼見原文,此處為結構概覽)
本示例以「最小可運行單元」展示了 JDBC 核心流程。實戰中請務必引入連接池、ORM 框架、統一異常處理與日誌體系,構建可維護、高效能的數據訪問層。