使用latin-1编码插入数据

时间:2013-10-01 14:41:48

标签: java sqlite jdbc

我需要将编码为latin-1的数据插入到SQLite数据库中。 (这是一个外部要求;更改数据库或编码不是一种选择。)根据SQLite documentation,这应该是可能的:

  

SQLite并不特别关注它收到的文本,并且非常乐意处理   未标准化的文本字符串,甚至是格式良好的UTF-8或UTF-16。从而,   想要存储IS08859数据的程序员可以使用UTF-8接口来实现。

我可以轻松编码文本:

Charset charset = Charset.forName("ISO-8859-1");
byte[]  data    = mystring.getBytes(charset);

但我无法看到如何插入它,因为Statement.executeUpdate需要一个String,而不是一个字节数组。

2 个答案:

答案 0 :(得分:1)

虽然您可以假装您的ISO8859-1字符串是UTF-8字符串,但最好将它们存储为blob。 SQLite将在需要时自动在blob和字符串之间进行转换(内部实现完全相同),并且大多数internal functions在blob而不是字符串上执行时将使用字节索引,这正是您想要的。 / p>

使用参数处理Blob:

PreparedStatement ps = conn.prepareStatement(
    "INSERT INTO MyTable(Name) VALUES(?)");
ps.setBytes(1, data);
ps.execute();

答案 1 :(得分:0)

将字符串编码为具有所需编码的字节数组,并在运行查询之前将其作为(格式错误的)UTF-8读回。

String query = "INSERT INTO ...";
// Ugly trickery to insert data encoded as latin-1
query = new String(query.getBytes("ISO-8859-1"), "UTF-8");
statement.executeUpdate(query);