我正在开发一个 livecode 应用程序。在其中我需要使用基于云的 sqlite,这意味着它应该可以为所有用户共享。因为现在我将 sqlite 用于本地,但我认为它只适用于一个设备应用程序,虽然这个每个用户都有自己的数据库。但我想要的是与所有用户共享一个数据库。有些人建议我对远程数据库使用 JSON 解析。 http://lessons.runrev.com/s/lessons/m/4071/l/7003-connecting-to-a-mysql-database。这个 mysql 数据库可以通过网络上的 url、用户名和密码访问。有那里没有任何Json解析。在Sqlite的情况下可能吗?请帮忙
2 回答
如果为 SQLite 编写服务器,则可以将 SQLite 与多个客户端一起使用。请注意,使用 MySQL 或 PostgreSQL 服务器可能更容易,即使它们的强类型很烦人。
对于联网的 SQLite,您需要一个通过套接字连接从客户端接收数据的服务器。所以基本上你会有一个 LiveCode 程序来传递它通过网络获取的 SQL 查询。一个非常简单的例子(未经测试):
服务器:
on mouseUp
accept connections on port 8080 with message "queryMessage"
end mouseUp
on queryMessage theIP
read from socket theIP until return
put it into mySQL
delete char -1 of mySQL --remove trailing return that was added for network protocol
put revOpenDatabase("SQLite","path/to/myDatabase.sqlite",,,) into connectionID
put revDataFromQuery(,,connectionID,mySQL) into myResult
revCloseDatabase connectionID
write length(myResult) & return & myResult to socket theIP --no return needed, length based
close socket theIP
end queryMessage
客户:
on mouseUp
-- make sure to know what IP the server is running from!
-- the number after ":" is the port
put "localhost:8080" into myIP
open socket to myIP
write "SELECT * FROM tableName" & return to socket myIP
read from socket myIP until return
put it into returnStringLength
read from socket myIP for returnStringLength chars
put it into field "the sql query result"
close socket myIP
end mouseUp
您还需要:
- 处理 INSERT、PRAGMA 等命令的方法(基本上是 revExecuteSQL)
- SQL 错误报告/处理
- 套接字错误报告/处理
- 如果可以公开访问,则需要安全性!
- 记录谁在查询和正在发生什么
我只对 4-8 个客户使用了这种方法,所以我不知道它对于更大的客户群的扩展性如何。请注意,在这种情况下,“服务器”不是在共享的虚拟主机(如网页)上运行,而是在同一本地网络中的 pc 上的“普通”程序(示例适合在与客户端相同的 pc 上运行)。通过 Internet 执行此操作通常需要您在路由器或防火墙上转发端口,因此设置起来有点困难,但也是可能的。
确保在字典中查找示例中使用的命令。
SQLite 被设计为单用户本地文件数据库,因此它不适合您的应用程序。基于云的数据存储有很多选择。如果您想直接连接到像 MySQL 这样的远程数据库服务器,您可以这样做,但这意味着启用远程访问,这是一个安全风险。如果您只需要从一组受限制的 IP 访问数据库,那么可能值得考虑但使用 SSL 和仅具有有限权限的用户。
我不知道 JSON 是如何参与其中的,但您可以使用 Web 服务器 + 服务器端脚本来创建返回 JSON 对象的 API。这是一种比远程访问更安全的方法。还有其他选择... Amazon Web Services SimpleDB 可能适合您。