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

JDBC 處理中文資料的兩種方案

     編輯:Java 相關知識

問題背景

在使用 JDBC 讀寫中文資料時,常會遇到編碼不匹配導致亂碼的問題。本文提供兩種可行的解決方案,適用於 Java Applet 透過 Socket 傳輸資料至資料庫的情境。

方案一:直接使用位元組串流

利用 DataOutputStream 搭配 BufferedOutputStream 將資料庫擷取的位元組直接寫入 Socket 輸出串流:

byte[] buff = new byte[512]; // 緩衝區大小可自行調整
Socket sock = ... // 初始化 Socket
ResultSet rs = ... // 初始化 ResultSet
DataOutputStream dataout = new DataOutputStream(
    new BufferedOutputStream(sock.getOutputStream()));
InputStream in = rs.getAsciiStream(column_index); // column_index 為欄位索引

for (;;) {
    int size = in.read(buff);
    if (size == -1) break;
    dataout.write(buff, 0, size);
}
dataout.flush();

此方式可直接將中文資料傳送至客戶端。

方案二:使用本地化輸入串流(已棄用)

將上述程式碼第 6 行改為:

InputStream in = Runtime.getRuntime().getLocalizedInputStream(
    rs.getAsciiStream(column_index));

注意: getLocalizedInputStream() 在 JDK 1.1 已被標記為 deprecated,未來版本可能移除,不建議在新專案中使用。

建議做法:改用 BufferedReader

為相容新版 JDK,建議採用 BufferedReader 搭配 InputStreamReader:

BufferedReader br = new BufferedReader(
    new InputStreamReader(rs.getAsciiStream(column_index)));

此方式可正確處理字元編碼轉換,是目前較標準的作法。

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