首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 資料庫程式設計核心技巧全解析

     編輯:Java 相關知識

JDBC 核心操作流程

Java 操作資料庫的標準流程包含四個關鍵步驟:獲取連線、執行 SQL、處理結果、釋放資源。掌握這套流程是進行高效資料庫開發的基礎。

1. 獲取資料庫連線

方式一:DriverManager 直連

適用於簡單應用或測試環境,透過載入驅動類別並建立連線:

String className = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr";
String uid = "system";
String pwd = "manager";
Class.forName(className);
Connection cn = DriverManager.getConnection(url, uid, pwd);

方式二:JNDI 資料源(推薦用於 Web 容器)

在 JSP/Servlet 環境中,透過 JNDI 查找容器管理的 DataSource,實現連線池複用:

String jndi = "jdbc/db";
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
DataSource ds = (DataSource) ctx.lookup(jndi);
Connection cn = ds.getConnection();

2. 執行 SQL 語句

Statement:靜態 SQL 執行

Statement sm = cn.createStatement();
ResultSet rs = sm.executeQuery(sql);   // 查詢
int count = sm.executeUpdate(sql);     // 增刪改
sm.close();

PreparedStatement:參數化預編譯(防注入、效能更優)

String sql = "INSERT INTO user (id, name) VALUES (?, ?)";
PreparedStatement ps = cn.prepareStatement(sql);
ps.setInt(1, id);
ps.setString(2, name);
ResultSet rs = ps.executeQuery();      // 查詢
int count = ps.executeUpdate();        // 更新

3. 處理執行結果

  • 查詢:返回 ResultSet,透過 next() 移動游標,getInt()/getString() 取值。
  • 更新:返回影響行數(int)。
  • 資源關閉順序:ResultSet → Statement/PreparedStatement → Connection。

4. 進階特性

可捲動/可更新 ResultSet

// Statement 方式
Statement sm = cn.createStatement(
    ResultSet.TYPE_SCROLL_INSENSITIVE,
    ResultSet.CONCUR_READ_ONLY);

// PreparedStatement 方式
PreparedStatement ps = cn.prepareStatement(
    sql,
    ResultSet.TYPE_SCROLL_INSENSITIVE,
    ResultSet.CONCUR_READ_ONLY);
rs.absolute(9000);  // 直接跳轉到第 9000 行

批量更新

Statement 批次:同一 Statement 執行多條異構 SQL。

Statement sm = cn.createStatement();
sm.addBatch(sql1);
sm.addBatch(sql2);
sm.executeBatch();

PreparedStatement 批次:同一 SQL 多組參數批次執行。

PreparedStatement ps = cn.prepareStatement(sql);
for (Data d : list) {
    ps.setInt(1, d.getId());
    ps.setString(2, d.getName());
    ps.addBatch();
}
ps.executeBatch();

5. 交易控制

cn.setAutoCommit(false);  // 關閉自動提交
try {
    Statement sm = cn.createStatement();
    sm.executeUpdate(sql1);
    sm.close();
    sm = cn.createStatement();
    sm.executeUpdate(sql2);
    sm.close();
    cn.commit();          // 提交交易
} catch (Exception e) {
    cn.rollback();        // 回滾
}

關鍵點:每條 SQL 執行前需關閉前一個 Statement,確保交易邊界清晰。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved