从远程服务器访问sqlite

juzqafwq  于 2023-01-26  发布在  SQLite
关注(0)|答案(8)|浏览(2030)

我想知道我如何才能访问一个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." );
  }
baubqpgj

baubqpgj1#

SQLite不是一个网络数据库,因此它没有内置任何网络连接功能。
您需要执行以下操作之一:

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

一个web应用程序本质上是一个web服务。如果你碰巧在这个数据库上运行一个web应用程序,只需要向管理员公开特定级别的数据库访问权限。
不建议您这样做,因为多个线程/客户端/等同时访问SQLite DB可能会很快导致并发问题。

xt0899hw

xt0899hw2#

虽然sqlite本身不提供任何网络端点,但您可以使用sqlite-web之类的web gui。
假设你已经安装了python,你可以用

pip install sqlite-web

安装后,启动Web界面,并执行以下操作:

sqlite_web my_database.db

默认情况下,它运行在http://127.0.0.1:8080/上,即只能从本地主机访问。
要使其在LAN/WAN上可见,请使用以下命令启动它:

sqlite_web --host 0.0.0.0 my_database.db

虽然在你自己的家庭或公司网络上运行--host 0.0.0.0可能没问题,但在公共主机上运行它是一个非常糟糕的主意(尽管该应用程序允许设置密码)。对于公共主机上的远程访问,在127.0.0.1上运行它会更安全,然后通过ssh转发端口。
UI有一个选项来导出CSV或JSON,如果你在浏览器devtools中查看请求,你会发现你可以通过使用SQL查询进行POST请求来直接获取JSON数据(* 非常适合在你的内部网中播放和调试,但***最糟糕的噩梦***如果你在互联网上暴露的话-你已经被警告过 ):️😱 ❌ - you have been warned❗️):
获取JSON的POST:

curl http://127.0.0.1:8080/mytable/query/ --data-raw 'sql=SELECT * FROM mytable limit 42;&export_json='

这取决于你的使用情况,但我最好的答案是"不要这样做!"如果你需要访问数据编程通过网络然后导出的sqlite表作为CSV或JSON文件,并把它们放在一个网络服务器上。
免责声明:我和这个应用程序的作者没有关系,只是和op有同样的需求,在github上找到了这个应用程序。

mbyulnm0

mbyulnm03#

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;"
8qgya5xd

8qgya5xd4#

Navicat可以通过SSH连接到远程sqlite数据库。
对于较小的项目im使用phpliteadmin

92vpleto

92vpleto5#

你不能像那样直接远程访问一个sqlite数据库。如果你需要共享它,你将不得不开发一个web服务,并从你的Qt应用程序与web服务而不是数据库对话。
有一些工具可以作为类似的Web服务,例如this site有一些链接。

yzckvree

yzckvree6#

你可以考虑切换到PostgreSQL而不是SQLite,数据库操作是非常相似的。在处理主键等方面的细微差别你可以谷歌一下。例如在INSERT语句中,你会在SQLite中传递一个NULL作为主键,而在Postgre中,你会传递一个DEFAULT(假设你想让数据库为你创建键)。
例如,在Python3中,我所知道的代码差异是PostgreSQL允许远程连接,避免SQL注入语法略有不同,因为SQLite3的方式是?,而PostgreSQL 9.5的方式是%s
切换到Postgre将为您提供远程连接的可能性,这是一个明确的步骤,从使用本地数据库(这是专为中小带宽的应用程序)。

ubby3x7f

ubby3x7f7#

sqlite是一个文档数据库,这意味着它几乎只是一个平面文件存储您的数据,只有最小的数据库引擎在顶部,这就是为什么它像300kb的总。你可以做的解决方案是复制数据库从您的远程位置到您的位置通过ftp或访问它通过分配一个网络共享位置给它。警告,虽然只有1个用户可以写入sqlite在同一时间。

ef1yzkbh

ef1yzkbh8#

你可以在服务器上使用php来运行你所需要的任何sql命令,然后从设备上导航到php页面。

相关问题