有這個問題。你需要兩樣東西:對PreparedStatement的NVARCHAR2列和Oracle特定的方法調用以通知的字符串編碼預言:
/**
* Sets a statement parameter as NCHAR. Use before setting the field value.
* @param pstmt the prepared statement
* @param index the parameter index
*/
public static void setNChar(PreparedStatement pstmt, int index) {
OraclePreparedStatement opstmt = (OraclePreparedStatement)pstmt;
opstmt.setFormOfUse(index, OraclePreparedStatement.FORM_NCHAR);
}
如果使用普通的SQL字符串使用Unicode字符,可以作爲甲骨文得到所有的SQL命令UTF-8:驅動程序自動翻譯。但是,對於準備好的語句使用你需要明確地告訴oracle。
如果您運行Java 6並具有ojdbc6驅動程序,您也可以嘗試PreparedStatement.setNString()。 (在我的情況下,我們必須使用Java 5與版本4驅動程序 - 不要問爲什麼)
(注意:我知道這是供應商鎖定,因爲您被迫使用具體的oracle類而不是jdbc接口)
使用十六進制編輯器/傾卸器檢查文件看看哪些字節實際上代表那些非ASCII字符。 – laalto 2009-06-23 06:41:30