Как я могу импортировать данные из вызова REST, json feed в базу данных SQLite на MAC?
У меня есть данные на моем сервере в базе данных SQL Server. Я могу получить доступ к этому вызову REST в С# ASP.Net Web.API, который у меня есть, и он вернет json-данные. Возможно, я могу получить это, чтобы вернуть другие форматы данных, но я не уверен в этом. У меня есть полный доступ к серверному приложению и json, который он создает.
В моей разработке Mac я использую DB Browser для SQLite и Xamarin для разработки многоплатформенного приложения. У меня есть небольшая база данных SQLite.
Как я могу импортировать/вставлять данные JSON из некоторых моих таблиц на сервере в таблицы базы данных SQLite, которые я создаю на своем MAC-адресе? Мне нужно сделать это вручную, но я хотел бы автоматизировать процесс импорта в bash script или что-то подобное, что я могу запустить с помощью команды.
Я исследовал это, но, похоже, не могу найти примеров того, как это сделать, поэтому я открыл щедрость в надежде, что кто-то сможет дать ответ, который будет большой помощью для меня и для других,
Ответы
Ответ 1
Сверху моей головы у вас есть два варианта, которые вы можете сделать:
- Сделайте простое приложение Xamarin.Mac, которое сделает это. Подобно тому, как пользователи Windows могут создавать консольное приложение. Просто имейте одну кнопку и вызывайте почти тот же код в вашем приложении xamarin, чтобы загрузить данные и выгрузить их в sqlite db.
- Лучшим вариантом было бы написать "unit test" (или тест интеграции для этих хардкорных подглядываний), который вызывает существующий код в вашем приложении xamarin и записывает его в sqlite db on общий ресурс файла. Затем вы можете делать это так часто, как хотите, запустите unit test. Это можно сделать в вашем тестовом бегуне в Xamarin Studio (Visual Studio или что-нибудь, что имеет тестовый бегун). Я бы использовал либо nUnit, либо xUnit, поскольку они поддерживают кросс-платформенную поддержку.
В моем предыдущем приложении у меня были тесты XUnit, которые проверялись, чтобы убедиться, что вызовы API работают и другие тесты, чтобы убедиться, что мой код SQLite.Net-PCL работает. Вы можете объединить это в один "тест", чтобы загрузить данные в db3.
Это предполагает, что вы отделили код. Если нет, вы можете просто скопировать и вставить его. В любом случае, если вы используете пакеты x-plat nuget, код будет работать на настольном или мобильном приложении.
Ответ 2
я использовал бы node js для записи script с помощью javascript.
установить nodejs. https://nodejs.org/en/download/ или
brew install node
создать каталог для работы над вашим проектом
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);
});
запускайте следующий терминал для запуска script каждый раз, когда он изменяется, для разработки/тестирования
nodemon app.js