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

使用better-sqlite3获取表默认值返回undefined的问题求助

如何正确设置并获取SQLite表的默认值?

问题核心原因

你遇到的全字段返回undefined问题,主要来自三个关键错误:

  1. 表内无数据:字段默认值仅在插入数据且未指定对应字段时生效,你创建表后未插入任何记录,查询自然无结果。
  2. SQL语法错误:SQLite不支持DEFAULT undefined,对于REAL类型的serverTimeout,需改为DEFAULT NULL或合法数值(如0.0)。
  3. 查询未执行:SettingsDB.prepare()仅创建查询语句对象,未实际执行查询,需调用.get()(单条)或.all()(多条)方法才能获取结果。

修正后的完整代码

1. 修正表创建语句

import Database from 'better-sqlite3-multiple-ciphers'
import fs from 'fs'
import path from 'path'

const commandToCreateJitsiSettingsTable = `
  CREATE TABLE IF NOT EXISTS jitsiTable (
    id INTEGER PRIMARY KEY AUTOINCREMENT,

    alwaysOnTopWindowEnable INTEGER NOT NULL DEFAULT 1,
    disableAGC INTEGER NOT NULL DEFAULT 0,
    serverURL TEXT,
    serverTimeout REAL DEFAULT NULL,

    created_at timestamp NOT NULL DEFAULT current_timestamp,
    updated_at timestamp NOT NULL DEFAULT current_timestamp
  )
`

2. 初始化表并插入默认数据

if (!fs.existsSync(path.join(settingsUserDataFolder, "Settings.db"))) { // 补全缺失的括号
  const SettingsDB = new Database(path.join(settingsUserDataFolder,"Settings.db"), {})
  SettingsDB.pragma('journal_mode = WAL')
  SettingsDB.pragma("rekey='secret-key'");

  SettingsDB.exec(commandToCreateJitsiSettingsTable)
  // 插入一条默认记录,自动填充所有带默认值的字段
  SettingsDB.prepare(`INSERT INTO jitsiTable DEFAULT VALUES`).run()

  SettingsDB.close();
}

3. 正确执行查询

else {
  console.log("Settings.db already exists")

  const SettingsDB = require('better-sqlite3-multiple-ciphers')(path.join(settingsUserDataFolder,"Settings.db"), {})
  SettingsDB.pragma("key='secret-key'");

  // 执行查询并获取单条记录
  const row = SettingsDB.prepare("SELECT * FROM jitsiTable").get();
  console.log(row.alwaysOnTopWindowEnable, row.disableAGC, row.serverURL, row.serverTimeout, row.created_at, row.updated_at)

  SettingsDB.close();
}

补充说明

  • 若需要多配置记录,可将查询方法改为.all(),并调整插入逻辑支持多条数据。
  • SQLite的current_timestamp会自动填充当前时间,无需额外处理时间字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:15:30