从sqlback格式的文件中提取数据以转换为CSV

时间:2012-08-31 17:38:36

标签: java android sqlite csv

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

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

有没有人有关于如何执行此类任务的任何线索?

2 个答案:

答案 0 :(得分:1)

如果使用Android,您可以利用构建的SQLiteDatabase和SQLiteOpenHelper。您会找到所有所需的信息here

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

编辑:所以基本上你需要做的就是通过读取字节来解析字节,这样就可以访问内容了。在某些情况下,您甚至不需要将它们转换为String,因为您可能只需要该字节的值。 (即:偏移: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循环。

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

答案 1 :(得分:1)

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

需要注意的重要事项:

1)确保包含使用当前类加载器加载sqlite-JDBC驱动程序。这是通过行

完成的

2)sqlite文件是一个db,即使它不在某个服务器上。因此,您仍然必须创建与文件的连接以与其进行交互。您必须打开连接并关闭连接。  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)您可以使用带有列索引或列标题键的get命令从ResultsSet中获取数据 rs.getString("qo")

希望有助于任何人遇到与我相同的问题