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

React Native中SQLite启动时仅创建单表,求双表创建解决方案

解决方法

问题根源

  1. 你每次调用SQLiteService()都会生成全新的服务实例,虽然逻辑上不影响,但属于冗余操作;
  2. SQL语句中用单引号包裹列名('key')是错误的——单引号在SQL中表示字符串字面量,而非列标识符,key作为SQLite保留字,必须用反引号转义;
  3. 未使用事务管理多表创建,可能因连续执行时的隐式错误导致部分操作失败。

步骤1:修正SQL语句(SqliteService.tsx)

将列名的单引号替换为反引号,避免语法解析错误:

import { enablePromise, openDatabase } from 'react-native-sqlite-storage'

const SQLiteService = () => {
  const getDBConnection = async () => {
    enablePromise(true)
    return openDatabase({ name: 'test.db', location: 'default' })
  }
  
  // 修正列名的转义方式
  const createTable1 = async (db) => {
    const query = `CREATE TABLE IF NOT EXISTS TABLE_1 (\`key\` TEXT NOT NULL, \`value\` TEXT NOT NULL);`
    await db.executeSql(query)
  }
  
  const createTable2 = async (db) => {
    const query = `CREATE TABLE IF NOT EXISTS TABLE_2 (\`key\` TEXT NOT NULL, \`value\` TEXT NOT NULL);`
    await db.executeSql(query)
  }

  // 新增批量创建方法(用事务保证原子性)
  const createAllTables = async (db) => {
    await db.transaction(async (tx) => {
      await tx.executeSql(createTable1.toString().match(/`CREATE.*;/)[0])
      await tx.executeSql(createTable2.toString().match(/`CREATE.*;/)[0])
    })
  }

  return {
    getDBConnection,
    createTable1,
    createTable2,
    createAllTables
  }
}

步骤2:优化数据库初始化逻辑(App.tsx)

复用同一个SQLiteService实例,避免冗余创建,并使用批量创建方法:

const setupDatabase = useCallback(async () => {
  // 只创建一次服务实例
  const sqliteService = SQLiteService()
  const db = await sqliteService.getDBConnection()
  
  // 用事务批量创建表
  await sqliteService.createAllTables(db)
  
  // 操作完成后关闭连接(按需选择)
  await db.close()
}, [])

useEffect(() => {
  setupDatabase()
}, [setupDatabase])

替代方案(不新增批量方法)

如果不想修改SqliteService,只需调整App.tsx的实例复用逻辑即可:

const setupDatabase = useCallback(async () => {
  const sqliteService = SQLiteService()
  const db = await sqliteService.getDBConnection()
  
  // 使用同一个实例的方法
  await sqliteService.createTable1(db)
  await sqliteService.createTable2(db)
  
  await db.close()
}, [])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:35:49