【问题标题】:QT/SQLITE- Weird symbol on database?QT/SQLITE- 数据库上的奇怪符号?
【发布时间】:2016-02-09 07:49:31
【问题描述】:

我想知道为什么当我使用 SQLite 管理器查看我的表格时,我会得到这个奇怪的符号,其中一个盒子在三个角落封装了 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
    }

【问题讨论】:

  • "QString rowid = 3;"它是 QString 还是 int?
  • 显然,它最终是一个包含字符 U+0003 的字符串。

标签: c++ qt sqlite


【解决方案1】:

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

我会检查 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();
}

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 2012-12-07
    • 2019-10-29
    • 2013-08-16
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多