0

我有一个代表 sqlite db 文件的 sqback 文件。我想从这个 sqback 文件中提取数据,即表名和内容,并将其转换为 csv 文件格式。我想使用 Java 来做到这一点。

** sqback 文件在处理之前已经从 android 设备上传到 pc。所以我需要一个适合服务器端的解决方案。

有没有人对如何执行这样的任务有任何线索?

4

2 回答 2

1

如果使用 Android,您可以利用内置的 SQLiteDatabase 和 SQLiteOpenHelper。你会在这里找到你需要的所有信息。

解析完所有内容后,您可以使用File以您想要的方式导出到 CSV 。

编辑:所以基本上你需要做的是通过读取它们来解析字节,这样就可以访问内容。在某些情况下,您甚至不需要将它们转换为字符串,因为您可能只需要字节的值。(即:偏移量:44 长度:4 描述:模式格式编号。支持的模式格式为 1、2、3 和 4。)。您始终可以使用任何 HEX 编辑器检查您的值是否正确,即使使用任何类型的文本编辑器打开 sqlite 文件也会有所帮助。

让我们从头开始。首先,读取文件。两种方法

  • 一种。读取整个文件并在之后解析它
  • 湾。以块的形式读取和解析整个文件(推荐,特别是对于更大的文件)

这两种方法都将共享以下大部分代码:

File file = new File("YOUR FILE ROUTE");
int len = 1024 * 512; //512KB

try {
    fis = new FileInputStream(file);
} catch (FileNotFoundException e1) {
    fis = null;
    e1.printStackTrace();
}
byte[] b = new byte[len];
int bread;

try {

    while((bread = fis.read(b, 0, len))!=-1)
    {
        if(parseBlock(b, bread)==1)
            return;
}

    fis.close();

} catch (IOException e) {
    e.printStackTrace();
}

区别在于获取部分块并动态解析它们(我猜这对你有用)和获取整个内容将只是放:

fis.read(b, 0, fis.available);

而不是while循环。

最终,您的方法是正确的,这就是将字节转换为字符串的方法。(新字符串(b))。此外,第一个字符可能代表奇怪的符号,如果您查看 SQL 的文件格式,这些是用于存储一些元数据的保留字节。使用任何文本编辑器打开 sqlite 文件并检查您在其中看到的内容是否与您的代码中的内容匹配。

于 2012-08-31T17:44:45.903 回答
1

该网站指出要使用哪些额外的库,并提供如何与 sqlite 文件交互的示例 (http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC#Usage)

需要注意的重要事项:

1) 确保包括使用当前类加载器加载 sqlite-JDBC 驱动程序。这是用线完成的

2) sqlite 文件是一个数据库,即使它不在某处的服务器上。因此,您仍然必须创建与文件的连接才能与之交互。您还必须打开连接并关闭连接。 Connection connection = null; connection = DriverManager.getConnection("jdbc:sqlite:" + path); // path is a String to the sqlite file (sqlite or sqback) connection.close(); // after you are done with the file

3)使用sql代码查询文件可以提取信息。这将返回一个 ResultSet 类型的可处理对象,该对象保存与查询有关的数据

  Statement statement = connection.createStatement();
  statement.setQueryTimeout(30);
  ResultSet rs = statement.executeQuery("SELECT * FROM " + tblName); 

4) 从 ResultsSet 中,您可以使用带有列索引或列标题键的 get 命令获取数据 rs.getString("qo")

希望对遇到和我一样问题的人有所帮助

于 2012-10-01T17:47:41.620 回答