Доступ к sqlite с удаленного сервера - PullRequest
5 голосов
/ 02 декабря 2011

Мне интересно, как я могу получить доступ к базе данных sqlite, которая находится на удаленном сервере. Я прочитал потоки, препятствующие этому, но мне нужно сделать это, если это возможно.

     /*
QUrlOperator xc("http://example.com");
xc.get("testdatabase.db");
*/

QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE" );

  db.setDatabaseName(xc.get("testdatabase.db"));
  //idea

  if( !db.open() )
  {
    qDebug() << db.lastError();
    qFatal( "Failed to connect." );
  }

Ответы [ 7 ]

7 голосов
/ 02 декабря 2011

SQLite не является сетевой базой данных, поэтому он не имеет встроенной возможности сетевого подключения.

Вам понадобится либо:

  • Сделать базу данных SQLite доступной на сетевом диске общего доступа ИЛИ
  • Запись / поиск существующего сетевого сервера / веб-службы для него

Веб-приложение по сути является веб-службой. Если вы используете веб-приложение поверх этой БД, просто предоставьте доступ к определенным уровням БД только для администраторов.

Не рекомендуется делать это, потому что несколько потоков / клиентов / и т.д. одновременный доступ к БД SQLite может очень быстро привести к проблемам с параллелизмом.

3 голосов
/ 19 марта 2013

Navicat может подключаться через SSH к удаленной базе данных sqlite.

Для небольших проектов я использую phpliteadmin

2 голосов
/ 02 декабря 2011

sqlite - это база данных документов, означающая, что она представляет собой обычное хранилище файлов ваших данных с минимальным движком базы данных, поэтому она составляет всего 300 КБ.В качестве решения вы можете скопировать базу данных из удаленного местоположения в ваше местоположение по протоколу ftp или получить к ней доступ, назначив ей общий сетевой ресурс.Имейте в виду, что только один пользователь может одновременно писать в sqlite.

1 голос
/ 02 декабря 2011

Вы не можете напрямую получить доступ к базе данных sqlite удаленно.Если вам нужно поделиться им, вам придется разработать веб-сервис и общаться с веб-сервисом, а не с базой данных из вашего приложения Qt.

Есть некоторые инструменты, которые действуют как веб-сервис для подобных вещейНапример, этот сайт имеет несколько ссылок.

0 голосов
/ 09 июля 2018

вы можете рассмотреть переход на PostgreSQL вместо SQLite, манипулирование базой данных очень похоже. Маленькие различия в обработке первичных ключей и т. Д. Вы можете Google. Например, в операторе INSERT вы передадите NULL в SQLite в качестве первичного ключа, а в Postgre вы передадите его как DEFAULT (если вы хотите, чтобы база данных создала ключ для вас).

Например, в Python3 разница в коде, о которой я знаю, заключается в том, что PostgreSQL разрешает удаленное соединение и что избегание синтаксиса SQL-инъекций немного отличается, так как SQLite3 будет с ?, а PostgreSQL9.5 будет с %s

Переключение на Postgre предоставит вам возможность удаленного подключения, и это определенный шаг по сравнению с использованием локальной базы данных (которая предназначена только для приложений с малой и средней пропускной способностью).

0 голосов
/ 24 марта 2018

SQLite только на основе файлов.Невозможно общаться с ним по TCP / IP.

Как и файл базы данных Access, файл базы данных должен находиться в общей сетевой папке.Путь обычно будет UNC-путем, например "\ server \ sharename \ folderpath \ databasefile".

Проблема в том, что созданная вами строка подключения не является строкой подключения.Это частичная строка.У вас есть это:

DataSource = @"\\\\" + txtipaddress.Text + @"\qscanDBAttacheds\test.s3db;Version=3;New=False;Compress=True;"

Часть «DataSource» должна быть частью строки, которую вы строите.У тебя этого нет.Вам нужно это:

string connString = @"Data Source=\\" + txtipaddress.Text + @"\qscanDBAttacheds\test.s3db;Version=3;New=False;Compress=True;"
0 голосов
/ 03 декабря 2011

Вы можете использовать php на сервере для запуска любых необходимых вам команд sql и просто перейти на страницу php с устройства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...