我尝试用Qt创建一个SQLite数据库,我做了!!我调用了我的数据库“ prova_db ”,它包含下表:
marker_db
id site (columns)
0 www.google.it
1 www.youtube.it
2 www.facebook.it
然后,我试图查询我的prova_db . 这是代码:
int main () {
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("prova_db");
if (!db.open()) { printf("DB doesn't exist\n");}
else {
QSqlQuery query1;
query1.exec( "SELECT site FROM marker_db WHERE id = 1");
int i = query1.numRowsAffected();
printf("result row: %d\n", i);
while(query1.next()){
QString str = query1.value(0).toString();
printf("result: %s\n", str);
}
}
db.close();
return 0;
}
结果是:
result row : 0
result : (strange char)
相反,结果应该是:
result row: 1
result : www.youtube.it
我在哪里做错了?
谢谢!
1 回答
我认为你有错误的期望:
numRowsAffected()
的结果告诉你查询改变了多少行 . 您的查询不会改变任何内容,因此结果应为0
或未定义 . 因此,您不应期望第一个输出为risultato riga: 1
. 请改用size()
方法查找与SELECT
查询匹配的行数 .第二个问题是您正在将
QString
对象传递给printf()
,它需要一个指向以空值终止的char
值数组的指针(当您使用%s
格式说明符时) . 您需要将QString
对象转换为指向C字符数组的指针 .