使用sqlite3程序从Android应用程序中将Sqlite数据库表导出为csv



我正试图将云导出/导入功能添加到我当前的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

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

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

是否可以导出sqlite3到csv

是的,这是不是很简单的操作,我们可以通过各种方法用程序来完成。正如这里所回答的,将sqlite导出到csv和这里将sqlite数据库导出到android中的csv文件,以及这里如何在android中实现将sqlite输出到excel.csv文件?The 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/目录。然后你的应用程序将自动运行根权限(与系统应用程序相同(

哪种方式更可取

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

希望,这有帮助。谢谢

最新更新