You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo SQLite报错:SQLiteDatabase无transaction及openDatabase方法

Expo 51 + expo-sqlite 14.x 常见API错误解决

问题根源

Expo 51对应的expo-sqlite 14.x版本完全重构了API,采用异步优先设计,移除了旧版的同步openDatabase和transaction方法,类型定义也同步更新,导致旧代码触发类型错误。

具体解决方案

1. 替换openDatabase为异步初始化方法

旧代码的同步初始化已被移除,改用以下两种方式:

方式一:异步函数初始化

import * as SQLite from 'expo-sqlite';

async function initDatabase() {
  // 异步打开数据库
  const db = await SQLite.openDatabaseAsync('tasks.db');
  
  // 示例:执行建表操作
  await db.execAsync(`
    CREATE TABLE IF NOT EXISTS tasks (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      title TEXT NOT NULL
    );
  `);
  
  return db;
}

// 在需要的地方调用初始化
// const db = await initDatabase();

方式二:React Hook(推荐在组件内使用)

import { useSQLite } from 'expo-sqlite';

function TaskManager() {
  // 自动处理数据库实例的生命周期
  const db = useSQLite('tasks.db');
  
  // 后续操作见下方事务处理
}

2. 替换db.transaction为异步事务方法

旧的同步transaction已被异步的transactionAsync替代,需配合async/await使用:

async function addNewTask(title) {
  try {
    await db.transactionAsync(async (tx) => {
      // 执行SQL操作
      await tx.runAsync('INSERT INTO tasks (title) VALUES (?)', [title]);
    });
    console.log('任务添加成功');
  } catch (error) {
    console.error('添加任务失败:', error);
  }
}

3. 修正类型定义

如果使用TypeScript,注意数据库实例的类型已从SQLite.SQLiteDatabase(同步)改为SQLite.AsyncSQLiteDatabase(异步):

import * as SQLite from 'expo-sqlite';

class TaskService {
  db: SQLite.AsyncSQLiteDatabase;
  
  constructor(db: SQLite.AsyncSQLiteDatabase) {
    this.db = db;
  }
  
  // 示例方法
  async getTasks() {
    const result = await this.db.getAllAsync('SELECT * FROM tasks');
    return result;
  }
}

(可选)使用同步API(不推荐)

如果非要使用同步操作,可改用openDatabaseSync,对应的同步transaction方法仍可用,但可能阻塞UI:

const db = SQLite.openDatabaseSync('tasks.db');
db.transaction((tx) => {
  tx.executeSql('INSERT INTO tasks (title) VALUES (?)', ['同步添加的任务']);
});

内容的提问来源于stack exchange,提问作者Leah Eyestone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:37:19