Java 操作資料庫的標準流程包含四個關鍵步驟:獲取連線、執行 SQL、處理結果、釋放資源。掌握這套流程是進行高效資料庫開發的基礎。
適用於簡單應用或測試環境,透過載入驅動類別並建立連線:
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);
在 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();
Statement sm = cn.createStatement();
ResultSet rs = sm.executeQuery(sql); // 查詢
int count = sm.executeUpdate(sql); // 增刪改
sm.close();
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(); // 更新
ResultSet,透過 next() 移動游標,getInt()/getString() 取值。// 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();
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,確保交易邊界清晰。