【问题标题】:Exporting Sqlite database table as csv from Android Application using sqlite3 programatically以编程方式使用 sqlite3 从 Android 应用程序将 Sqlite 数据库表导出为 csv
【发布时间】:2020-03-16 14:44:29
【问题描述】:

我正在尝试向我当前的 Android 应用程序添加云导出/导入功能。

我想让我的用户以 csv 格式将特定的 Sqlite 数据库表导出到 Google Drive。

我意识到我可以执行 select 语句并“手动”构建 csv 文件。

但是我想要一种类似于运行这些 sqlite3 命令的方法

>sqlite3 c:/sqlite/chinook.db
sqlite> .headers on
sqlite> .mode csv
sqlite> .output data.csv
sqlite> SELECT customerid,
   ...>        firstname,
   ...>        lastname,
   ...>        company
   ...>   FROM customers;
sqlite> .quit

理想情况下,我希望能够直接导出到 Google 表格

是否可以将 sqlite3 与我的应用程序打包并以编程方式执行上述命令?

【问题讨论】:

  • 您试图通过单线而不是使用 SQLiteDatabase API 来实现什么?
  • 我正在尝试从我的本地数据库中正确导出一个表,我的意思是正确处理包含逗号和/或引号等的文本内容。以及长整型双数字字段

标签: android sqlite export-to-csv


【解决方案1】:

可以导出 sqlite3 到 csv 吗?

是的,它是不是很简单的操作,我们可以通过各种方法以编程方式完成。正如这里export sqlite into csv 和这里Exporting SQLite Database to csv file in android 和这里How to implement Export sqlite To excel/csv file in android? 的回答一样,StackOverFlow 上提供了许多答案和解决方案。

但是如何通过 sqlite3 命令呢?

如果你真的想通过命令来做,你可以做到。但这将是一种真正的触觉方式,因为命令在终端上看起来很简单,但在编程上它们真的很糟糕。您需要超级用户权限,或者您需要将您的应用程序安装为系统应用程序。如果你真的想这样做,那么让我们开始吧,

首先让我们掌握基本知识。 Android 在下面运行 Linux 内核。现在,如果您必须以超级用户权限运行您的进程(以 root 身份运行),唯一的方法是通过命令行执行您的进程,因为这是您可以直接与内核交互的唯一方法。此外,您需要在运行任何命令之前使用 su。

Process process = Runtime.getRuntime().exec("su");

几乎一事无成。它只会使用对话框请求超级使用权限。您可以做的不仅仅是执行 su,您还可以使用 su 执行您的流程,如下所示

Process process = Runtime.getRuntime().exec(new String[] { "su", "-c", yourCommand});

所以你的命令是这样的,

Process process = Runtime.getRuntime().exec(new String[] { "su", "-c", "sqlite3 /data/data/your-package-name/databases/file.db", ".headers on",".mode csv","...and all other operations"});

-c 选项

在 su 的几个选项中最常用的是 -c,它告诉 su 执行在同一行直接跟在它后面的命令。该命令以新用户身份执行,然后运行 ​​su 的终端窗口或控制台在命令执行完成或已启动的任何程序已关闭后立即返回到以前用户的帐户。

备用选项

上述方法的另一种可能可行的方法是使用命令行将您的应用程序复制到/system/app/ 目录。然后您的应用程序将自动以 root 权限运行(与系统应用程序相同)

哪种方式更可取?

我个人喜欢第一种方式,因为在 android 应用程序中处理 shell 命令并不灵活。现在,许多提供商在内核级别阻止从第三方应用程序执行的 su 命令。

希望,这会有所帮助。谢谢!

【讨论】:

  • 您链接的解决方案都没有处理包含逗号或引号的文本列,这就是我想使用 sqlite 命令的原因
  • 您应该始终提及您的问题陈述。顺便说一句,您可以按照我在答案中的描述在运行时运行 shell cmd。唯一的问题是,一些 android 供应商只是在内核级别阻止运行时 shell cmd,这可能导致应用程序崩溃!!!
  • 为什么我需要提到我想要一个“有效”的 csv 文件?谁需要“破碎”的解决方案?
  • 这是一个有效的点配对,但是当您指定问题陈述时。它将引起人们对这个问题而不是问题的关注。乍一看,我还以为你只是想将sqlite导出为csv。
猜你喜欢
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
相关资源
最近更新 更多