Java 如何在preparedStatement中将字符编码格式更改为UTF-8。
私有静态布尔插入新表(){ 我需要这段代码生成行数,但我得到的都是零。当我在MySQL workbench中执行相同的查询时,我得到了正确的答案。请帮助我找到问题所在Java 如何在preparedStatement中将字符编码格式更改为UTF-8。,java,database,jdbc,count,Java,Database,Jdbc,Count,私有静态布尔插入新表(){ 我需要这段代码生成行数,但我得到的都是零。当我在MySQL workbench中执行相同的查询时,我得到了正确的答案。请帮助我找到问题所在 我知道问题出在哪里了。where子句中的第二个columen包含俄语字符,它们显示为“??”当我打印出来时。当我单独打印出来时,它们在控制台中可以很好地打印出来。我的第一个想法是,分配给文件名和种子变量的值不会创建一个WHERE子句,该子句对表中的任何行的计算结果都为true。我会输入一个println来显示这些值,并确认它们是什
我知道问题出在哪里了。where子句中的第二个columen包含俄语字符,它们显示为“??”当我打印出来时。当我单独打印出来时,它们在控制台中可以很好地打印出来。我的第一个想法是,分配给文件名和种子变量的值不会创建一个WHERE子句,该子句对表中的任何行的计算结果都为true。我会输入一个println来显示这些值,并确认它们是什么您希望是这样。此外,有些数据库在WHERE子句中可能区分大小写,因此您可能必须对此进行说明。您需要刷新结果。jdbc正在缓冲插入并在关闭连接之前刷新它们。 插入后使用
dbConnection.commit();
最后,问题是数据库连接中的编码,通过在连接中设置UTF-8解决:
jdbc:mysql://server/database?characterEncoding=UTF-8
正如中所建议的,我知道了问题所在,但不知道如何解决。第二个“?”种子包含俄语字符,当我打印“预印声明”时他们显示为?????。问题就在那之前。当我打印preparedStatement时,第二列显示为???,而不是俄语字符,没有看到。你试过这个->可能的重复吗
Connection dbConnection = getDBConnection();
System.out.println("CONNECTED TO DB");
PreparedStatement preparedStatement = null;
String countString;
String fileName;
String seed;
ResultSet rs = null;
BufferedReader br = new BufferedReader(new FileReader("/home/aoblah/Documents/Metaphor-July/Russian/MotherRussia"));
String line;
while(null != (line = br.readLine())){
splitsVille = line.split(":");
fileName = splitsVille[0].trim();
seed = splitsVille[1].trim();
countString = "SELECT COUNT(*) FROM metaphor_repository.source_domain_russian_OY2_v3 where filename = ? AND seed = ?" ;
preparedStatement = dbConnection.prepareStatement(countString);
preparedStatement.setString(1, fileName);
preparedStatement.setString(2, seed);
rs = preparedStatement.executeQuery();
if (rs.next()) {
int numberOfRows = rs.getInt(1);
System.out.println("numberOfRows= " + numberOfRows);
} else {
System.out.println("error: could not get the record counts");
}
}
rs.close();
preparedStatement.close();
dbConnection.close();
return true;
}