我在使用JDBC驅動程序從java讀取oracle中的阿拉伯字符時遇到問題,主要問題是我無法找到正確的字符編碼以獲取正確的數據,但我解決了問題手動使用此方法:無法在oracle數據庫中插入阿拉伯字符
public static String cleanORCLString(String s) throws UnsupportedEncodingException {
byte[] bytes = s.getBytes("UTF16");
String x = new String(bytes, "Cp1256");
String finalS = x.substring(3);
StringBuilder sb = new StringBuilder(finalS);
for(int k = sb.length() - 1 ; k > 0 ; k--) {
if(!isEven(k)) {
sb.deleteCharAt(k);
}
}
return sb.toString();
}
這種方法給我的數據庫顯示正確的字符喜歡它,但是當我嘗試更新/插入阿拉伯語數據,將其保存錯誤的字符。 例如:我的文本保存在數據庫中爲「?????????」而不是「مرحبا」。
這是我連接到oracle數據庫的方式。
URL = ORCLConnProperties.ORCL_THIN_PREFIX + orclProp.getIpAddress()
+ orclProp.getPortNumber() + ORCLConnProperties.ORCL_THIN_SUFIX;
// URL = jdbc:oracle:thin:@10.0.0.12:1521:ORCL
System.out.println("URL: " + URL);
Properties connectionProps = new Properties();
connectionProps.put("characterEncoding", "Cp1256");
connectionProps.put("useUnicode", "true");
connectionProps.put("user", orclProp.getUserName());
connectionProps.put("password", orclProp.getPassword());
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException ex) {
System.out.println("Error: unable to load driver class!");
System.exit(1);
}
myDriver = new oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver(myDriver);
conn = DriverManager.getConnection(URL, connectionProps);
請幫我解決這個問題嗎? 謝謝。
新注:
數據庫本身不使用UTF-16字符集,但
「的JDBC OCI驅動程序從服務器上的數據傳送到客戶端 字符集中的數據庫。根據NLS_LANG環境變量的值,驅動程序處理字符集 轉換:OCI將數據庫字符集中的數據轉換爲 UTF-8。JDBC OCI驅動程序然後將UTF-8數據傳遞給JDBC 班級圖書館,請將UTF-8數據轉換爲UTF-16。「
這應當注意以下提到的: http://docs.oracle.com/cd/B10501_01/java.920/a96654/advanc.htm
你有你的類路徑上的orai18n.jar? http://docs.oracle.com/cd/E11882_01/java.112/e16548/global.htm#JJDBC28643 –
不,我沒有它,我會嘗試:)並感謝您的信息和參考鏈接: ) – UsifShahin