如何将REST调用中的数据导入到MAC上的SQLite数据库中?

我有我的服务器在SQL Server数据库中的数据。 我可以通过REST调用访问我已经控制的C#ASP.Net Web.API,它将返回json数据。 也许我可以得到它返回其他格式的数据,但我不知道这一点。 我可以完全访问服务器应用程序和它创build的json。

在我的开发Mac上,我使用DB Browser for SQLite和Xamarin来开发一个多平台的应用程序。 我有一个小的SQLite数据库创build。

我怎样才能从服务器上的一些表中导入/插入JSON数据到我在MAC上创build的SQLite数据库中的表中? 我需要手动执行此操作,但是我想自动执行导入bash脚本或类似的命令的过程。

我研究过这个,但似乎找不到如何去做的例子,所以我开了一个赏金,希望有人能给我一个答案,对我和他人有很大的帮助。

在我头顶,你有两个select,你可以做:

  • 做一个简单的Xamarin.Mac应用程序,这样做。 类似于Windows的人可能会做一个控制台的应用程序。 只要有一个button,并调用Xamarin应用程序中的几乎相同的代码来下载数据并将其转储到一个SQLite数据库。
  • 一个更好的select,将写一个“unit testing”(或集成testing为那些铁杆窥视),调用您的xamarin应用程序中的现有代码,并将其写入文件共享上的sqlite数据库。 然后,您可以按照需要随时进行unit testing。 这可以在Xamarin Studio的testing运行器(Visual Studio或任何具有testing运行器的东西)中完成。 我会使用nUnit或xUnit,因为他们有很好的跨平台支持。

在我以前的应用程序,我有XUnit检查,以确保API调用正在工作,其他testing,以确保我的SQLite.Net PCL代码工作。 您可以将其组合成一个“testing”,将数据下载到db3中。

这假定你抽出你的代码。 如果没有,你可以复制并粘贴它。 无论哪种方式,如果您使用x平台nuget包的代码将在桌面或移动应用程序的工作。

我会使用节点js写一个脚本使用JavaScript。

安装nodejs。 https://nodejs.org/en/download/或

brew install node 

创build一个目录来处理你的项目mkdir myimporter cd myimporter

在文件夹中安装所需的库

 npm install --save request sqlite3 moment npm install -g nodemon 

用你最喜欢的文本编辑器打开文件夹或app.js

将以下代码保存为app.js

 var request = require('request'); var sqlite3 = require("sqlite3").verbose(); var moment = require("moment"); var url = 'http://www.google.com'; var s, e; var fs = require("fs"); var file = "test.db"; //var file = process.env.CLOUD_DIR + "/" + "test.db"; var exists = fs.existsSync(file); var sqlite3 = require("sqlite3").verbose(); var db = new sqlite3.Database(file); // use same exists from checking if db exists, with assumption that table would exists in a new db. if(!exists){ db.run("CREATE TABLE Stuff (thing TEXT)"); } function saveResultTosqlite3(message){ var stmt = db.prepare("INSERT INTO Stuff VALUES (?)"); stmt.run(message); stmt.finalize(); } s = moment(); request(url, function (error, response, body) { e = moment(); var elapsed =e.diff(s,'milliseconds'); var responseCode = response.statusCode; if (!error && response.statusCode == 200) { console.log("successful request"); } var message = 'request to ' + url + ' returned status code of ' + responseCode.toString() + ' in ' +elapsed.toString() + ' milliseconds' ; console.log(message); saveResultTosqlite3(message); }); 

运行下面的terminal以在每次更改脚本时运行脚本以进行开发/testing

 nodemon app.js