SQLite 是一个轻量级的嵌入式数据库,它本身并不支持实时更新。但是,你可以通过以下方法实现类似实时更新的效果:
- 使用 WebSockets:
WebSockets 是一种在单个 TCP 连接上进行全双工通信的协议。你可以使用 WebSocket 在客户端和服务器之间建立一个实时通信通道,当数据库发生变化时,服务器可以通过 WebSocket 将更新推送到客户端。
以下是一个简单的示例:
- 服务器端(使用 Node.js 和
ws
库):
const WebSocket = require('ws'); const sqlite3 = require('sqlite3').verbose(); const db = new sqlite3.Database(':memory:'); db.serialize(() => { db.run("CREATE TABLE data (value TEXT)"); db.run("INSERT INTO data VALUES ('Hello, World!')"); }); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', (ws) => { ws.on('message', (message) => { console.log('Received:', message); }); setInterval(() => { db.run("UPDATE data SET value = 'https://www.yisu.com/ask/New Value'", (err) => { if (err) { console.error(err.message); } else { ws.send(JSON.stringify({ type: 'update', table: 'data', values: { value: 'New Value' } })); } }); }, 1000); });
- 客户端(使用 HTML 和 JavaScript):
SQLite Real-time Update Hello, World!
- 使用轮询:
客户端可以定期向服务器发送请求,查询数据库中的最新数据。这种方法不如 WebSocket 实时,但在某些情况下可能更容易实现。
- 服务器端(使用 Node.js 和 Express):
const express = require('express'); const sqlite3 = require('sqlite3').verbose(); const app = express(); const port = 3000; const db = new sqlite3.Database(':memory:'); db.serialize(() => { db.run("CREATE TABLE data (value TEXT)"); db.run("INSERT INTO data VALUES ('Hello, World!')"); }); app.get('/data', (req, res) => { db.get('SELECT value FROM data', (err, row) => { if (err) { res.status(500).send(err.message); } else { res.send(row.value); } }); }); app.listen(port, () => { console.log(`Server is running at http://localhost:${port}`); });
- 客户端(使用 HTML 和 JavaScript):
SQLite Real-time Update Hello, World!
这两种方法都可以实现类似实时更新的效果,但 WebSocket 通常更高效且实时性更强。