如何将QLineEdit与sqlite数据库绑定?

时间:2017-03-01 12:35:55

标签: qt

我想从QLineEdit将数据保存到sqlite数据库中。如何与QlineEdit绑定?请解释一下。

这是我的代码:它不起作用

**QString user_name = ui->txt_UserName->text ();
    QString pass = ui->txt_Pass->text ();

    QSqlQuery query;
    query.prepare ("CREATE TABLE login_info("
                                "user_id text primary key,"
                                "pass text)"
                   );
    query.prepare ("INSERT INTO login_info (user_id) VALUES('shajksfl')");
    query.prepare ("DELETE FROM login_info");
    query.bindValue (":user_name", user_name);

    query.prepare ("SELECT * FROM login_info");

    if(!query.exec ()){
        //
        qDebug() << query.lastInsertId ();
        QMessageBox::critical (this, "Eror!", "Unable to save data.", QMessageBox::Ok, QMessageBox::Cancel);
    } else {

        QMessageBox::information (this, "Success!", "Success to save data.", QMessageBox::Ok, QMessageBox::Cancel);

        while(query.next ()){
            QString usr = query.value (0).toString ();
            QString pswd = query.value (1).toString ();

            qDebug() << usr << pswd << endl;
        }
    }**

如果我手动插入,它会起作用。

2 个答案:

答案 0 :(得分:0)

如果通过&#34; bind&#34;你的意思是当文本发生变化时自动保存到数据库,和/或在数据库发生变化时更新文本,那么这本身就不可能,你必须对它进行编码。

如果您只想在SQL查询中绑定一个值(即只是通过替换令牌以安全的方式在查询中设置值),那么您应该这样做:

query.prepare ("INSERT INTO login_info (user_id) VALUES(:user_name)");
query.bindValue (":user_name", user_name);

这将取代&#34;:user_name&#34;通过user_name变量中包含的值,添加引号和所需的一切。

另请注意,您不能多次使用prepare,然后exec。您必须在每个准备好的查询后调用exec。请查看显示示例的Qt documentation page

答案 1 :(得分:0)

你使用了几个&#34; prepare()&#34;没有执行它,你绑定没有使用占位符 查看Qt文档QSqlQuery::prepare(const QString&)

QString user_id = txt_UserName->text();
QSqlQuery query;
query.prepare("INSERT INTO login_info (user_id) VALUES(':user_id')");
query.bindValue(":user_id", user_id);
query.exec();

如果要执行另一个查询,则必须准备另一个语句 使用您的代码,您的exec方法执行以下查询:DELETE FROM login_info
所以它无法奏效 此致