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

点击按钮存储输入值至SQLite数据库失败,请求排查解决

问题分析与修复方案

你的代码存在几个关键错误,导致数据无法存入数据库,以下是逐条修复说明:

1. 表名与字段名不匹配

你的数据库表名为players,字段是id和name,但代码里写的是Spieler表和spielernamen字段,完全不对应,这是核心问题之一。

2. INSERT参数错误与主键冲突风险

你定义的INSERT语句需要两个参数,但代码里只传了inputValue;而且固定设置id=1会导致主键冲突(主键唯一,第二次插入就会失败)。你的表已将id设为主键,SQLite会自动为其生成递增数值,无需手动指定。

3. 异步操作顺序错误

db.run是异步操作,你在它还没执行完成就调用了db.close,会直接中断数据库操作,导致数据根本没机会写入。必须把db.close放在db.run的回调函数里,确保写入完成后再关闭连接。

修复后的完整代码

const sqlite3 = require('sqlite3').verbose();

document.getElementById('neuerSpieler').addEventListener('click', function() {
  
  let db = new sqlite3.Database('player.db', sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => {
    if (err) {
      console.error(err.message);
      return; // 连接失败直接退出
    }
    console.log('Verbunden mit der Datenbank.');
  });

  let inputValue = document.getElementById('inputField').value;
    
  if (inputValue.trim()) { // 过滤纯空格输入
    // 仅插入name字段,id由数据库自动生成
    let sql = `INSERT INTO players (name) VALUES (?)`;
    db.run(sql, [inputValue], function(err) {
      if (err) {
        console.error(err.message);
        db.close(); // 出错时也要关闭连接
        return;
      }
      console.log(`Ein neuer Datensatz wurde hinzugefügt, ID: ${this.lastID}`);
      // 写入完成后关闭连接
      db.close((err) => {
        if (err) {
          console.error(err.message);
        }
        console.log('Verbindung zur Datenbank wurde geschlossen.');
      });
    });
  } else {
    console.log('Eingabefeld darf nicht leer sein!');
    db.close();
  }
});

额外说明

  • 添加sqlite3.OPEN_CREATE参数,避免数据库不存在时连接失败
  • 用inputValue.trim()过滤掉无意义的纯空格输入
  • 利用this.lastID可获取刚插入数据的自增ID,方便调试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:35:18