我想从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;
}
}**
如果我手动插入,它会起作用。
答案 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
所以它无法奏效
此致