joken-前端工程师

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

增删改查

以下是如何使用 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 中创建和使用索引。索引是数据库查询性能的关键因素,合理使用索引可以显著提高查询速度。

posted on 2024-12-09 20:16  joken1310  阅读(5)  评论(0编辑  收藏  举报