Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用拉丁-1编码插入数据_Java_Sqlite_Jdbc - Fatal编程技术网

Java 使用拉丁-1编码插入数据

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

我需要将编码为拉丁语-1的数据插入SQLite数据库。(这是一个外部要求;更改数据库或编码不是一个选项。)根据要求,这应该是可能的:

SQLite对接收到的文本并不挑剔,并且非常乐意处理 未规范化甚至格式不正确的UTF-8或UTF-16文本字符串。因此 想要存储IS08859数据的程序员可以使用UTF-8接口来实现

我可以很容易地对文本进行编码:

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);

请不要!总有一天你会后悔的!这需要更改模式,不是吗?对于我来说,这不是一个开始,因为它是外部定义的;它使用。