从远程服务器访问sqlite

时间:2011-12-02 14:03:23

标签: qt sqlite

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

8 个答案:

答案 0 :(得分:7)

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

你需要:

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

Web应用程序本质上是一种Web服务。如果您碰巧在此数据库之上运行Web应用程序,只需将某些级别的数据库访问权限暴露给管理员。

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

答案 1 :(得分:3)

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

对于使用phpliteadmin

的小型项目

答案 2 :(得分:2)

sqlite是一个文档数据库,这意味着它几乎只是数据的平面文件存储,只有最小的数据库引擎,这就是它总共300kb的原因。您可以做的解决方案是通过ftp将数据库从远程位置复制到您的位置,或者通过为其分配网络共享位置来访问它。但请注意,一次只有1个用户可以写入sqlite。

答案 3 :(得分:1)

您无法像这样远程直接访问sqlite数据库。如果您需要共享它,您将不得不开发一个Web服务并与您的Qt应用程序中的Web服务而不是数据库进行通信。

有一些工具可以充当像这样的东西的网络服务,例如this site有一些链接。

答案 4 :(得分:1)

尽管sqlite本身不提供任何网络终结点,但是您可以使用网络GUI,例如sqlite-web

假设您已经安装了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转发端口。

免责声明:我与该应用程序的作者无关。只是具有与op相同的需求,并在github上找到了该应用。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

您可以考虑切换到PostgreSQL而不是SQLite,数据库的操作非常相似。您可以在处理主键等方面稍有不同。例如,在INSERT语句中,您将在SQLite中传递一个NULL作为主键,而在Postgre中,您将其传递为DEFAULT(假设您希望数据库为您创建键)。

例如,在Python3中,我知道的代码差异是PostgreSQL允许远程连接,并且避免SQL注入语法略有不同,因为SQLite3的方式将与?一起使用,而PostgreSQL9.5的方式将与{{ 1}}

切换到Postgre将为您提供远程连接的可能性,并且比使用本地数据库(仅适用于中小型带宽应用程序)要明确。

答案 7 :(得分:-1)

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