java - SQLite 数据库中的奇怪编码 : How to retrieve string values with JDBC?

标签 java sqlite jdbc encoding character-encoding

我有

    Class.forName("org.sqlite.JDBC");
    Connection conn = DriverManager.getConnection("jdbc:sqlite:cities.db");
    Statement stat = conn.createStatement();

    ResultSet rs = stat.executeQuery("select * from cities;");+

    while (rs.next()) {
        byte[] bytes = rs.getBytes("country");
        String country = new String(bytes, "utf-8");
        System.out.println(country);
    }

    rs.close();
    conn.close();

我的输出显示 � 表示 ä、ö、ü 等字符。

如果我从命令行运行 sqlite3 并从那里查询表,字符没问题...

“编译指示编码;”显示 utf-8...

如果我调试,字节数组在“ü”的位置有“-127”...

如何解决? 是什么导致了这个问题?

链接到示例 SQLite 文件(只有一行):

https://www.dropbox.com/s/6nvl737b6picbie/cities.db?dl=0

最佳答案

你能试试吗

Class.forName(org.sqlite.JDBC.class.getCanonicalName());
String url = "jdbc:sqlite:";
SQLiteConfig config = new SQLiteConfig();
config.setEncoding(SQLiteConfig.Encoding.UTF8);
Connection conn = DriverManager.getConnection(url, config.toProperties());
Statement stat = conn.createStatement();

ResultSet rs = stat.executeQuery("select * from cities;");+

while (rs.next()) {
    String country = rs.getString("country");
    System.out.println(country);
}

关于java - SQLite 数据库中的奇怪编码 : How to retrieve string values with JDBC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34674367/

相关文章:

java - 如何使用bash或java将三个不同的sqlite3数据库D1、D2和D3附加到另一个数据库D4

java - 从 JDBC 连接处理 Sybase 中的登录错误的正确方法是什么?

mysql - 使用类型安全配置的 Scala/Slick JDBC 编码配置

java - 如何检查特定驱动程序实现的 JDBC API 版本

java - checkstyle 方法不是为扩展而设计的——需要是抽象的、最终的或空的

java - Java读取大文件——Java堆空间

php - 独立的 PHP 服务器

ios - 如何在 SWIFT 的 sqlite 表中添加列

java - 我们可以在迭代器 for 循环中添加额外的停止条件吗?

java - 富="bar"; if(foo == "bar"){ doX(); }否则{ "But this ALWAYS runs"} 为什么?