在项目研发中,发现在利用QT操作sqlite3数据库的时候,在自己封装的工具类里面,进行delete操作的时候,数据库报错,总是说参数不匹配,但是发现自己传入的sql语句,以及bindValue都是对的。
无奈之下,通过在overstackflow查找答案,发现问题。
必须按照官网给的例子操作顺序来执行。
先prepare,再bindvalue,再exec执行。我的实现就是没有按照这个顺序,所以出现这个错误。
问题回答原网站:https://stackoverflow.com/questions/20786003/qt-qsqlquery-bindvalue-works-with-but-not-with-placeholders
7down votefavorite |
I'm working with sqlite,doing insert into table. Folowwing QsqlQuery testQuery(QString("INSERT INTO test(testcol) VALUES(?)")); testQuery.bindValue(0,someQStringObg); testQuery.exec(); works,but QsqlQuery testQuery(QString("INSERT INTO test(testcol) VALUES(:val)")); testQuery.bindValue(":val",someQStringObg); testQuery.exec(); don't. testQuery.lastError().text() returnsNo query Unable to fetch row Have no clue why things are that way,but really want to find out. |
||||||||||||||||
add a comment |
1 Answer
up vote7down voteaccepted |
Please use prepare as theofficial example: QsqlQuery testQuery; testQuery.prepare("INSERT INTO test(testcol) VALUES(:val)"); testQuery.bindValue(":val",someQStringObj); testQuery.exec(); The reason for the error is that the query was executed before binding to the corresponding placeholder. You can see the relevant part of theconstructor documentation:
|