[英]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.