Java 使用拉丁-1编码插入数据
我需要将编码为拉丁语-1的数据插入SQLite数据库。(这是一个外部要求;更改数据库或编码不是一个选项。)根据要求,这应该是可能的: SQLite对接收到的文本并不挑剔,并且非常乐意处理 未规范化甚至格式不正确的UTF-8或UTF-16文本字符串。因此 想要存储IS08859数据的程序员可以使用UTF-8接口来实现 我可以很容易地对文本进行编码:Java 使用拉丁-1编码插入数据,java,sqlite,jdbc,Java,Sqlite,Jdbc,我需要将编码为拉丁语-1的数据插入SQLite数据库。(这是一个外部要求;更改数据库或编码不是一个选项。)根据要求,这应该是可能的: SQLite对接收到的文本并不挑剔,并且非常乐意处理 未规范化甚至格式不正确的UTF-8或UTF-16文本字符串。因此 想要存储IS08859数据的程序员可以使用UTF-8接口来实现 我可以很容易地对文本进行编码: Charset charset = Charset.forName("ISO-8859-1"); byte[] data = mystring
Charset charset = Charset.forName("ISO-8859-1");
byte[] data = mystring.getBytes(charset);
但我看不出如何将其作为语句插入。executeUpdate需要的是字符串,而不是字节数组。虽然可以假设ISO8859-1字符串是UTF-8字符串,但最好将它们存储为BLOB。 SQLite将在需要时自动在blob和字符串之间转换(内部实现无论如何都是相同的),大多数在blob而不是字符串上执行时,将使用字节索引,这正是您想要的 BLOB使用参数进行处理:
PreparedStatement ps = conn.prepareStatement(
"INSERT INTO MyTable(Name) VALUES(?)");
ps.setBytes(1, data);
ps.execute();
使用所需的编码将字符串编码到字节数组中,并在运行查询之前将其读回(格式错误的)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);
请不要!总有一天你会后悔的!这需要更改模式,不是吗?对于我来说,这不是一个开始,因为它是外部定义的;它使用。