点击按钮存储输入值至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
相关产品推荐
相关产品推荐

