从远程服务器访问sqlite

Gan*_*alf 6 sqlite qt

我想知道我如何访问一个坐在远程服务器上的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." );
  }
Run Code Online (Sandbox Code Playgroud)

jef*_*unt 8

SQLite不是网络数据库,因此它没有内置任何网络连接功能.

您需要:

  • 在可通过网络访问的共享驱动器上使SQLite DB可用
  • 为其编写/查找现有的网络服务器/ Web服务

Web应用程序本质上是一种Web服务.如果您恰好在此数据库之上运行Web应用程序,则只需向管理员公开某些级别的数据库访问权限.

不建议你这样做,因为多个线程/客户端等.同时访问SQLite DB可能会很快导致并发问题.


mr_*_*app 6

Navicat可以通过 SSH 连接到远程 sqlite 数据库。

对于较小的项目,我使用phpliteadmin


ccp*_*zza 6

虽然 sqlite 本身不提供任何网络端点,但您可以使用 web gui,例如sqlite-web

假设你已经安装了 python,你可以安装它

pip install sqlite-web
Run Code Online (Sandbox Code Playgroud)

安装后,使用以下命令启动 Web 界面:

sqlite_web my_database.db
Run Code Online (Sandbox Code Playgroud)

默认情况下,它在http://127.0.0.1:8080/ 上运行,即只能从本地主机访问。

要使其在您的 LAN/WAN 上可见,请使用以下命令启动它:

sqlite_web --host 0.0.0.0 my_database.db
Run Code Online (Sandbox Code Playgroud)

虽然--host 0.0.0.0在您自己的家庭网络上运行很好,但在公共主机上运行是一个非常糟糕的主意(即使该应用程序允许设置密码)。对于公共主机上的远程访问,运行它127.0.0.1然后通过 ssh 转发端口会更安全。

UI 有一个导出 CSV 或 JSON 的选项,如果您查看在浏览器 devtools 中发出的请求,您会发现您可以通过使用 SQL 查询执行 POST 请求直接将数据作为 JSON 获取(非常适合播放在您的Intranet,但调试的噩梦不断,如果你暴露在Internet上?? -你已经被警告??? ):

获取 JSON 的 POST:

curl http://127.0.0.1:8080/mytable/query/ --data-raw 'sql=SELECT * FROM mytable limit 42;&export_json=' 
Run Code Online (Sandbox Code Playgroud)

这取决于您的用例,但 imo 对原始问题的最佳答案是“不要这样做!” 如果您需要通过网络以编程方式访问数据,则将 sqlite 表导出为 JSON 文件并将它们放在网络服务器上。

免责声明:我不隶属于该应用程序的作者。刚刚和 op 有同样的需求,并在 github 上找到了该应用程序。


小智 5

SQLite 仅基于文件。无法通过 TCP/IP 与它对话。

与 Access 数据库文件一样,您必须将数据库文件放在网络共享文件夹中。该路径通常是 UNC 路径,例如“\server\sharename\folderpath\databasefile”。

问题是您构建的连接字符串不是连接字符串。这是一个部分字符串。你有这个:

DataSource = @"\\\\" + txtipaddress.Text + @"\qscanDBAttacheds\test.s3db;Version=3;New=False;Compress=True;"
Run Code Online (Sandbox Code Playgroud)

“DataSource”部分必须是您构建的字符串的一部分。你没有那个。你需要这个:

string connString = @"Data Source=\\" + txtipaddress.Text + @"\qscanDBAttacheds\test.s3db;Version=3;New=False;Compress=True;"
Run Code Online (Sandbox Code Playgroud)


Tim*_*yer 3

您不能像这样直接远程访问 SQLite 数据库。如果您需要共享它,您将必须开发一个 Web 服务并与该 Web 服务通信,而不是从您的 Qt 应用程序与数据库通信。

有一些工具可以充当此类内容的网络服务,例如该网站有一些链接。