better-sqlite3 prepare get
时间: 2025-05-07 14:19:09 浏览: 30
### 使用 `better-sqlite3` 的 Prepare 方法
在 `better-sqlite3` 库中,Prepare 方法用于创建预编译语句对象。这不仅有助于防止 SQL 注入攻击,还能提高执行效率[^3]。
#### 创建预编译语句
通过调用数据库实例上的 `.prepare()` 方法可以创建一个预编译语句:
```javascript
const sqlite3 = require('better-sqlite3');
const db = new sqlite3('example.db');
// 准备一条插入数据的SQL语句
let stmt = db.prepare(`INSERT INTO users(name, age) VALUES (?, ?)`);
stmt.run('Alice', 28);
stmt.run('Bob', 34);
```
#### 执行查询并获取单行或多行结果
除了插入操作外,还可以准备 SELECT 查询语句,并使用 `.get()` 获取单行结果或使用 `.all()` 获取多行结果:
```javascript
// 准备一条查询语句
let selectStmt = db.prepare(`SELECT * FROM users WHERE age > ?`);
// 获取满足条件的第一条记录
console.log(selectStmt.get(30));
// 获取所有满足条件的记录
console.log(selectStmt.all(25));
```
#### 处理参数化查询
为了安全性和灵活性,在构建 SQL 语句时应尽可能采用参数化方式传递变量值给占位符 (`?`) 而不是直接拼接字符串:
```javascript
// 不推荐的做法:容易受到SQL注入攻击
db.exec(`DELETE FROM users WHERE name='${unsafeName}'`);
// 推荐做法:使用预编译语句和绑定参数
let deleteStmt = db.prepare(`DELETE FROM users WHERE name=?`);
deleteStmt.run(safeName);
```
#### 错误处理机制
当遇到运行时错误(例如违反约束),可以通过捕获异常来进行适当处理。注意此时不应再继续调用 `sqlite3_step()` 来尝试进一步的操作[^1]。
```javascript
try {
let insertStmt = db.prepare(`INSERT OR ABORT INTO unique_table(value) VALUES (?)`);
insertStmt.run(duplicateValue); // 如果存在重复键,则会抛出异常
} catch (err) {
console.error(err.message);
}
```
阅读全文
相关推荐















