繁体   English   中英

使用sqlite3以编程方式从Android应用程序将Sqlite数据库表导出为csv

[英]Exporting Sqlite database table as csv from Android Application using sqlite3 programatically

我正在尝试向我当前的 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 与我的应用程序一起打包并以编程方式执行上述命令?

是否可以导出,sqlite3 到 csv?

是的,它是不是非常简单的操作,我们可以通过各种方法以编程方式来完成。 还回答了此处将 sqlite 导出到 csv和此处将SQLite 数据库导出到 android 中的 csv 文件以及此处如何在 android 中实现将 sqlite 导出到 excel/csv 文件? 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 命令。

希望这可以帮助。 谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM