我正在尝试用我的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");
无济于事。
知道如何纠正这种情况吗? 谢谢!
答案 0 :(得分:1)
有一个非常简单的解决方案:让Java和SQLite驱动程序为您做一切。你不必关心编码和逃避参数。
如何做到这一点:使用PreparedStatement:
String name = "æøå"
PreparedStatement prepStmt = conn.prepareStatement("insert into db(name) values (?)");
prepStmt.setString(1, name);
prepStmt.executeUpdate();
此外,此代码片段可抵御SQL注入攻击。
BTW:你发布的第二个代码片段完全无用,它什么也没做。将String转换为byte []并返回String不会改变String的单个位。