有这个问题。你需要两样东西:对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