我想知道为什么当我使用SQLite Manager查看表时,为什么得到一个奇怪的符号,它的一个框在三个角中封装了3个0,在最后一个角中封装了3个。如果我使用QString,则小时数是否仍可以像数字值一样操作小时数列?谢谢

void FirstWindow::on_pushButton_clicked()
{
    FirstWindow conn;

    QString rowid,Activity,thehours;
    Activity=ui->lineEdit->text();
    rowid=3;
    thehours=1;

    conn.connOpen();
    QSqlQuery qry;
    qry.prepare("insert into datatable (row,activity,hours) values('"+rowid+"','"+Activity+"','"+thehours+"')");

    //if this is good
    if(qry.exec())
    {
        this->hide();//hiding current ui
        mainwindow = new MainWindow(this);
        mainwindow->show();


        conn.connClose(); //close after inserting another
    }

最佳答案

首先,您的列是字符串还是整数?

我将检查ui-> lineEdit-> text()是否实际上返回了数字。

其次,为您希望保存/加载的数据设置正确的列类型(整数,字符串,实数等)。这样,QSQLite错误将更有帮助。

第三,应该避免串联字符串以准备sql查询(假设rowid包含'字符!)。最好的方法是使用sqlite占位符调用prepare,然后添加值:

QSqlQuery qry;
qry.prepare("insert into datatable (row,activity,hours) values(?, ?, ?");
qry.addBindValue(rowid);
qry.addBindValue(Activity);
qry.addBindValue(thehours);

if(!qry.exec())
{
    qDebug() << qry.lastError();
}

10-08 08:27