2014-10-31 49 views
0

我想用我的Java程序中的数据填充SQLite数据库。通过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"); 

无济于事。

任何想法如何补救的情况? 谢谢!

+1

在插入数据或创建表之前,您是否设置了数据库编码(使用编译指示)? – zaerymoghaddam 2014-10-31 17:40:57

回答

1

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

如何这是可能的:使用PreparedStatement:

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

此外,该代码片段为针对SQL注入攻击安全。

顺便说一句:你发布的第二个代码片段是完全没用的,它什么都不做。将字符串转换为字节[]并返回到字符串不会更改字符串的单个位。