Не могу вставить арабские символы в базу данных оракула
У меня возникли проблемы при чтении арабских символов из oracle в java с использованием драйвера JDBC. Основная проблема заключалась в том, что я не смог найти правильную кодировку символов для получения правильных данных, но я решил проблему вручную, используя этот метод:
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);
пожалуйста, помогите мне в решении этой проблемы? Благодарю.
Новое примечание:
Сама база данных не использует набор символов UTF16, но
«Драйвер JDBC OCI передает данные с сервера клиенту в наборе символов базы данных. В зависимости от значения переменной среды NLS_LANG драйвер обрабатывает преобразования набора символов: OCI преобразует данные из набора символов базы данных в UTF -8. Затем драйвер OCI JDBC передает данные UTF-8 в библиотеку классов JDBC, где данные UTF-8 преобразуются в UTF-16. "
эта заметка упоминается здесь:http://docs.oracle.com/cd/B10501_01/java.920/a96654/advanc.htm