正如标题所示:可以肯定的是,我正在调试我的应用程序,因此在我将字符串放入PreparedStatement变量中时,特殊字符将更改为“?”。我实际上不知道在哪里搜索应该修复它的东西,所以我不知道是否需要代码..无论如何,我会在这里放一些:
PreparedStatement stm = null;
String sql = "";
try{
sql = "INSERT INTO methods (name, description) VALUES (?, ?)";
stm = connection.prepareStatement(sql);
stm.setString(1, method.getName());
stm.setString(2, method.getDescription());
//...
}catch(Exception e){}
在调试方法对象中的“name”字段时是正确的,但是将其添加到 stm 变量后,它将其字符更改为“?”。
我在 SO 上找到了一个关于类似 sitoatuin 的主题,但是没有任何答案可以帮助我,因为我确切地知道将字符串添加到语句中而不是在数据库中存在问题。但我不知道什么..
有什么建议么?
附言。我使用的是netbeans 6.7.1版本
编辑:我正在使用标准 netbeans 调试器进行调试,并在将字符串添加到“stm”变量之前检查变量的状态。我什至将 getName() 方法更改为带有特殊字符的静态字符串。所以可以肯定 Method 类一切正常。
EDIT2:我又做了一项测试。检查了 stm 变量,它的属性之一是“charEncoding”,它设置为“cp1252”。所以主要问题是..如何改变这一点?
这通常发生在使用不同的字符集在不同的地点。听起来好像您正在以 UTF-8 形式获取输入,并将其转换为另一个聊天集(可能您的数据库设置为其他内容),这会破坏特殊字符。
解决这个问题:使用相同的字符集到处*。 (我建议使用UTF-8)
*看一眼this or 我对另一个话题的回答(这是关于php的问题,但在java中几乎是一样的)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)