java - 通过java程序将挪威字母插入SQLite数据库

标签 java database sqlite encoding

我正在尝试用我的 java 程序中的数据填充 SQLite 数据库。

数据是使用 Apache POI 从 Excel 文件中读取的。我使用正常方法将数据插入数据库没有任何问题。 但是,当我使用 shell 手动检查数据库时,所有挪威语字符 æ,ø,å 都无法正确显示。每当我通过 shell 手动填写数据库时,它们都会按预期显示。 此外,当在控制台中打印出包含这些字符的 java 字符串时,它们会正确显示。

当执行这样的操作时,一定会出现问题:

String sql = "insert into db(name) values (æøå)";
stmt.executeUpdate(sql);

我已经尝试过

byte[] b = sql.getBytes("utf-8");
sql = new String(b, "utf-8");

没有效果。

知道如何补救这种情况吗? 谢谢!

最佳答案

有一个非常简单的解决方案适合您:让 Java 和 SQLite 驱动程序为您做所有事情。您不必关心参数的编码和转义。

这是如何实现的:使用PreparedStatement:

String name = "æøå"
PreparedStatement prepStmt = conn.prepareStatement("insert into db(name) values (?)");
prepStmt.setString(1, name);
prepStmt.executeUpdate();

此外,此代码片段可以抵御 SQL 注入(inject)攻击。

顺便说一句:您发布的第二个代码片段完全没用,它什么也没做。将字符串转换为 byte[] 并返回字符串不会更改字符串的任何一位。

关于java - 通过java程序将挪威字母插入SQLite数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26680356/

相关文章:

sql - SQLITE查询帮助

java - 创建 TableLayout 并从另一个类调用它 - Android

java - 处理程序未在 1 秒内运行 1000 次

java - SpannableStringBuilder 无法转换为 android.text.SpannableString

sql - plpgsql 错误 : syntax error at or near ":"

java - 当我将数据添加到数据库(mysql)时,JTable不刷新

java - 架构选择

java - 使用 Jackson 解析非 JSON JavaScript 对象

html - 使用数据库存储和获取网站的 html 页面

sql - SQLite:LIMIT值取决于条件