首页 > 解决方案 > 错误:表数据有 1 列,但提供了 3 个值 无法执行语句

问题描述

我正在使用 QML 项目测试这个简单的数据库程序:

Window {
    visible: true
    width: 640; height: 480
    title: qsTr("SQL Example")
    property var db
    property int ident: 0

    TextField {
        id: field
        placeholderText: qsTr("Enter Your Name")
        hoverEnabled: true
    }

    Button {
        text: "Next"
        anchors.top: field.bottom
        onClicked: storeData(field.displayText)
    }

    Component.onCompleted: initDatabase()

    function initDatabase() {
        db = LocalStorage.openDatabaseSync("data", "1.0", "Save names", 1000000)
        db.transaction( function(tx)
        { tx.executeSql('CREATE TABLE IF NOT EXISTS data (id INTEGER, name TEXT, mode TEXT)') })
    }

    function storeData(username) {
        db.transaction( function(tx) {
            tx.executeSql('INSERT INTO data VALUES (?, ?, ?)', [ident, username, ""])
            ident++ })
    }
}

当我点击Next按钮时,输入名称后,我收到以下错误消息:

qrc:/main.qml:36: 错误:表数据有 1 列但提供了 3 个值 无法执行语句

似乎一切都正确,但我不知道为什么会出现此错误!

标签: sqldatabasesqliteqml

解决方案


您拥有的查询。

INSERT INTO data VALUES (?, ?, ?)

必须用作更好实践的查询

INSERT INTO data (col1, col2, col3) VALUES (?, ?, ?)

注意事项

检查表是否已经存在于数据库中。这可能是创建表语句未使用三列定义执行的原因。如果是这样删除表并执行代码它将起作用。


推荐阅读