我想知道我如何访问一个坐在远程服务器上的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)
SQLite不是网络数据库,因此它没有内置任何网络连接功能.
您需要:
Web应用程序本质上是一种Web服务.如果您恰好在此数据库之上运行Web应用程序,则只需向管理员公开某些级别的数据库访问权限.
不建议你这样做,因为多个线程/客户端等.同时访问SQLite DB可能会很快导致并发问题.
虽然 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)
| 归档时间: |
|
| 查看次数: |
37889 次 |
| 最近记录: |