增删改查
以下是如何使用 Dexie.js 库进行增删改查操作的示例:
1. 初始化数据库
首先,你需要安装 Dexie.js:
npm install dexie
然后,在你的代码中引入并初始化 Dexie.js:
import Dexie from 'dexie';
const db = new Dexie('myDatabase');
db.version(1).stores({
myObjectStore: '++id, name, email',
});
2. 添加数据(Create)
const newData = { name: 'John Doe', email: 'john@example.com' };
db.myObjectStore.add(newData).then(id => {
console.log(`Data added successfully with ID: ${id}`);
}).catch(error => {
console.error('Unable to add data:', error);
});
3. 读取数据(Read)
db.myObjectStore.get(1).then(data => {
if (data) {
console.log('Data retrieved:', data);
} else {
console.log('No data found with ID:', 1);
}
}).catch(error => {
console.error('Unable to retrieve data:', error);
});
4. 更新数据(Update)
const updatedData = { id: 1, name: 'Jane Doe', email: 'jane@example.com' };
db.myObjectStore.update(updatedData).then(result => {
if (result === 1) {
console.log('Data updated successfully');
} else if (result === 0) {
console.log('No data found with ID:', updatedData.id);
}
}).catch(error => {
console.error('Unable to update data:', error);
});
5. 删除数据(Delete)
db.myObjectStore.delete(1).then(() => {
console.log('Data deleted successfully');
}).catch(error => {
console.error('Unable to delete data:', error);
});
这些示例展示了如何使用 Dexie.js 库进行基本的增删改查操作。Dexie.js 提供了简洁的 API,使得操作 IndexedDB 变得更加容易和直观。请确保在实际应用中根据需要调整对象存储和索引的定义。
游标
Dexie.js 提供了游标遍历功能,允许你遍历对象存储中的所有记录。以下是如何使用 Dexie.js 进行游标遍历的示例:
1. 遍历所有记录
db.myObjectStore.each(item => {
console.log(item);
}).catch(error => {
console.error('Error traversing data:', error);
});
2. 使用游标遍历并处理记录
db.myObjectStore.openCursor().then(cursor => {
if (!cursor) return; // 如果没有更多记录,退出
console.log('Key:', cursor.key, 'Value:', cursor.value);
// 继续到下一个记录
cursor.continue().then(nextCursor => {
// 递归调用以处理下一个记录
return db.myObjectStore.openCursor();
});
}).catch(error => {
console.error('Error traversing data:', error);
});
3. 使用游标遍历并修改记录
db.myObjectStore.openCursor().then(cursor => {
if (!cursor) return; // 如果没有更多记录,退出
// 修改当前记录
cursor.update({ ...cursor.value, name: 'Updated Name' }).then(() => {
console.log('Record updated:', cursor.key);
});
// 继续到下一个记录
cursor.continue().then(nextCursor => {
// 递归调用以处理下一个记录
return db.myObjectStore.openCursor();
});
}).catch(error => {
console.error('Error traversing data:', error);
});
4. 使用游标遍历并删除记录
db.myObjectStore.openCursor().then(cursor => {
if (!cursor) return; // 如果没有更多记录,退出
// 删除当前记录
cursor.delete().then(() => {
console.log('Record deleted:', cursor.key);
});
// 继续到下一个记录
cursor.continue().then(nextCursor => {
// 递归调用以处理下一个记录
return db.myObjectStore.openCursor();
});
}).catch(error => {
console.error('Error traversing data:', error);
});
这些示例展示了如何使用 Dexie.js 进行游标遍历,包括遍历所有记录、修改记录和删除记录。游标遍历是处理大量数据时非常有用的功能,因为它允许你逐个处理记录,而不是一次性加载所有记录到内存中。
索引
在 Dexie.js 中,创建索引是在定义对象存储(Object Store)时进行的。你可以在 version()
方法的 stores()
配置中指定索引。以下是如何使用 Dexie.js 创建索引的示例:
1. 初始化数据库并创建对象存储和索引
import Dexie from 'dexie';
const db = new Dexie('myDatabase');
db.version(1).stores({
myObjectStore: '++id, name, email', // '++id' 表示自动递增的主键,'name' 和 'email' 是索引
});
// 如果你需要添加更多复杂的索引,可以使用以下语法:
db.version(2).stores({
myObjectStore: '++id, name, email, &email', // '&email' 表示唯一索引
});
2. 使用索引进行查询
// 查询 name 索引
db.myObjectStore.where('name').equals('John Doe').toArray().then(results => {
console.log('Results:', results);
});
// 查询 email 索引
db.myObjectStore.where('email').startsWith('john').toArray().then(results => {
console.log('Results:', results);
});
// 查询唯一索引
db.myObjectStore.where('email').equals('john@example.com').toArray().then(results => {
console.log('Results:', results);
});
3. 动态添加索引
如果你需要在对象存储创建之后动态添加索引,可以使用 createIndex()
方法:
db.myObjectStore.createIndex('age', 'age', { unique: false });
4. 删除索引
如果你需要删除索引,可以使用 deleteIndex()
方法:
db.myObjectStore.deleteIndex('age');
这些示例展示了如何在 Dexie.js 中创建和使用索引。索引是数据库查询性能的关键因素,合理使用索引可以显著提高查询速度。
前端工程师、程序员