【发布时间】:2013-01-05 06:43:25
【问题描述】:
我在一个文件中读取一些保龄球运动员的名字,然后我需要在 SQLite 数据库中找到这些名字来计算他们的平均值。
一切都完美无缺,除了包含重音符号的名称(例如“É”)。
我在 SQLite 管理器中使用了PRAGMA Encoding,并且数据库以 UTF-8 编码。我还通过输出 Charset.defaultCharset();
另外,如果我在 SQLite 管理器中运行我的查询,一切正常,这实际上让我非常确定我需要对 JDBC SQLite 驱动程序做一些事情。我还没有找到一种方法来查看或更改它使用的编码。我什至不确定这是否是问题所在。
这是我正在使用的代码:
public double getPlayerAverage(String name, String leagueName){
PreparedStatement ps = null;
ResultSet rs = null;
double average = 0.0;
try{
connect();
ps = conn.prepareStatement("SELECT AVG(Score)Average FROM Scores " +
" JOIN Players p1 USING (PlayerID) " +
" WHERE UPPER(Name) = ? AND UPPER(LeagueName) = ? AND Season = '2012-2013' AND Score > -1" +
" GROUP BY Season, LeagueName, PlayerID; ");
ps.setString(1, name);
ps.setString(2, leagueName);
rs = ps.executeQuery();
if(rs.next())
{
average = rs.getDouble("Average");
}
else
{
System.out.println(name + " --- " + leagueName);
}
}
catch(SQLException sqle){
sqle.printStackTrace();
}
finally{
closer(rs, ps);
}
return average;
}
“else”输出没有相关平均数的名称,这意味着在数据库中没有找到这些球员。以这种方式输出的所有名称都包含重音符号,并且没有成功解析包含重音符号的名称。
【问题讨论】:
-
您使用的是哪个 Java Sqlite 驱动程序?
-
@Thilo 我正在使用 sqlitejdbc-v056
-
也许你可以试试另一个?像这个(如果可能的话,我理解它会包装原生库):bitbucket.org/xerial/sqlite-jdbc/downloads
-
@Thilo 谢谢。我刚试过,但我有同样的问题
标签: java string encoding sqlite