如何将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
- 在Mac上安装remotebuild失败,“uid必须是一个unsigned int”
- 节点js:无法在MacOSx / Linux上的ssh2连接中捕获“错误”
- Microsoft Azure函数和节点 – 我是Mac用户。 如何在Azure Portal中上传/安装Node软件包?
- 如何解决安装Yeoman后“哟:命令未find”
- sudo npm失败,env:node:没有这样的文件或目录
- 在OSX上安装Yeoman
- 为什么一个node.js进程在OSX上突然死亡而在任何日志文件中都没有解释?
- node.js中的execSync不能正确运行shell命令
- npm安装成功,但节点web.js错误w:“错误:无法find模块”