SQLite 是一個輕量級的嵌入式數(shù)據(jù)庫,它本身并不支持實時更新。但是,你可以通過以下方法實現(xiàn)類似實時更新的效果:
WebSockets 是一種在單個 TCP 連接上進行全雙工通信的協(xié)議。你可以使用 WebSocket 在客戶端和服務(wù)器之間建立一個實時通信通道,當數(shù)據(jù)庫發(fā)生變化時,服務(wù)器可以通過 WebSocket 將更新推送到客戶端。
以下是一個簡單的示例:
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 = 'New Value'", (err) => {
if (err) {
console.error(err.message);
} else {
ws.send(JSON.stringify({ type: 'update', table: 'data', values: { value: 'New Value' } }));
}
});
}, 1000);
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SQLite Real-time Update</title>
</head>
<body>
<h1 id="value">Hello, World!</h1>
<script>
const socket = new WebSocket('ws://localhost:8080');
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.type === 'update') {
document.getElementById('value').innerText = data.values.value;
}
};
</script>
</body>
</html>
客戶端可以定期向服務(wù)器發(fā)送請求,查詢數(shù)據(jù)庫中的最新數(shù)據(jù)。這種方法不如 WebSocket 實時,但在某些情況下可能更容易實現(xiàn)。
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}`);
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SQLite Real-time Update</title>
</head>
<body>
<h1 id="value">Hello, World!</h1>
<script>
function fetchData() {
fetch('/data')
.then(response => response.text())
.then(data => {
document.getElementById('value').innerText = data;
})
.catch(error => {
console.error('Error fetching data:', error);
});
}
setInterval(fetchData, 1000);
</script>
</body>
</html>
這兩種方法都可以實現(xiàn)類似實時更新的效果,但 WebSocket 通常更高效且實時性更強。