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

JSP 連接 Oracle 資料庫實戰:CLOB/BLOB 處理、編碼轉換與連線池最佳實務

     編輯:關於JSP

一、CLOB 大文本處理

讀取

Clob clob = rs.getClob("content");
Reader reader = clob.getCharacterStream(); // 支援中文
BufferedReader br = new BufferedReader(reader);
String line, content = "";
while ((line = br.readLine()) != null) content += line + "\n";
br.close();

寫入(必須三步驟)

  1. INSERT ... VALUES (..., empty_clob()) 分配 Locator。
  2. SELECT ... FOR UPDATE 鎖定該列,取得 Clob 物件。
  3. 寫入內容:Writer w = clob.setCharacterStream(1L); w.write(text); w.close();
  4. UPDATE ... SET content = ? WHERE ... 寫回(或同一交易自動生效)。
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement("INSERT INTO test(id, content) VALUES (?, empty_clob())");
ps.setInt(1, id); ps.executeUpdate();
ps = conn.prepareStatement("SELECT content FROM test WHERE id=? FOR UPDATE", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
    Clob clob = rs.getClob(1);
    Writer w = clob.setCharacterStream(1L);
    w.write("大量中文內容...");
    w.close();
}
conn.commit();

關鍵:FOR UPDATE 鎖列、setAutoCommit(false) 避免「違反讀取順序」錯誤。

二、中文編碼轉換工具類

public class ECov {
    // 資料庫讀出 (ISO-8859-1 → GB2312)
    public static String asc2gb(String s) {
        if (s==null) return s;
        try { return new String(s.getBytes("ISO8859_1"), "GB2312"); }
        catch (UnsupportedEncodingException e) { return s; }
    }
    // 寫入資料庫 (GB2312 → ISO-8859-1)
    public static String gb2asc(String s) {
        if (s==null) return s;
        try { return new String(s.getBytes("GB2312"), "ISO8859_1"); }
        catch (UnsupportedEncodingException e) { return s; }
    }
}

使用:ECov.gb2asc(str) 存入,ECov.asc2gb(str) 讀出。Oracle 瘦驅動預設以 ISO-8859-1 傳輸,故需雙向轉換。

三、實務細節

  • AutoCommit:批次操作時關閉,手動 commit();單筆可開啟。
  • 日期類型:setDate()/getDate() 需注意時區與 java.sql.Date vs java.util.Date 轉換。
  • 連線池:生產環境務必使用 DataSource (JNDI) + 連線池 (DBCP/HikariCP/C3P0),避免頻繁建立連線開銷。
  • 驅動類別:Oracle 10g+ 建議用 oracle.jdbc.OracleDriver,舊版 oracle.jdbc.driver.OracleDriver 已淘汰。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved