特殊字符和preparedStatement的问题,仅在我使用setString时

时间:2011-08-03 09:22:31

标签: java oracle jdbc character-encoding prepared-statement

我已经阅读了很多关于这个主题的主题,但每个人都指向数据库中的字符集。

我正在使用带有'ñ'等特殊字符的字符串,我无法在数据库中设置它们。正如您可能猜到的那样,字符会更改为“?”。

事情就是使用这个陈述,我明白了:

stmt = con.prepareStatement("INSERT INTO LONG_CODES_TABLE (TIMESTAMP, TABLE_NAME, CODE__C, CODE_DESC) 
VALUES (GET_TIMESTAMP, 'MUNICIPIOS', '" + municipio + "',  '" + municipio + "') ");

只是在同一个数据库和表中,没有改变任何东西,如果我使用以下内容我得到'?' DB中的字符:

stmt = con.prepareStatement("INSERT INTO LONG_CODES_TABLE (TIMESTAMP, TABLE_NAME, CODE__C, CODE_DESC) 
VALUES (GET_TIMESTAMP, 'MUNICIPIOS', ?,  ?) ");

stmt.setString(1, municipio);

stmt.setString(2, municipio);

因此,只有使用setString才会出现角色问题。 有什么想法吗?

编辑:'municipio'变量的值是,例如:'ABADIÑO'。 稍后,我可以通过使用sql语句询问该值来检查在路上或其他方面之间的差异,例如:

select * from long_codes_table 
where table_name = 'MUNICIPIOS' and code__c = 'ABADIÑO'

我得到结果行的一种方法。另一方面,我没有。

谢谢。

1 个答案:

答案 0 :(得分:1)

我也有这种行为。最重要的是,我发现从IDE启动应用程序时没有发生此错误。这就是我在JVM中意识到 - 编码缺失的那个。

java %vm-opts% %clspth% -Dfile.encoding=UTF-8 ...