私有静态布尔insertIntoNewTable() {
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;
}我需要由这段代码生成行计数,但我得到的只是零。当我在MySQL工作台中执行相同的查询时,我得到了正确的答案。请帮我找出问题。
我知道问题出在哪里了。where子句中的第二列包含俄语字符,它们显示为“?”当我打印出来的时候。当我把它们单独打印出来时,它们在控制台中打印的很好。
发布于 2014-08-04 18:51:26
你得把结果冲洗一下。jdbc正在缓冲插入并在关闭连接之前刷新它们。插入后使用dbConnection.commit();
最后,问题是数据库连接中的编码,并通过在连接:jdbc:mysql://server/database?characterEncoding=UTF-8中设置UTF-8来解决,正如Java PreparedStatement UTF-8 character problem中所建议的那样。
发布于 2014-08-04 18:38:23
我的第一个想法是,分配给fileName和种子变量的值不会为表中的任何行创建一个WHERE子句,该子句的计算结果为true。我会提交一个println来显示这些值,并确认它们是您所期望的。此外,某些数据库在WHERE子句中可以区分大小写,因此您可能必须考虑到这一点。
https://stackoverflow.com/questions/25125019
复制相似问题