我尝试用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
我在哪里做错了?
谢谢!
答案 0 :(得分:1)
我认为你的期望是错误的:numRowsAffected()
的结果会告诉你查询已经更改的行数。您的查询不会改变任何内容,因此结果应为0
或未定义。因此,您不应期望第一个输出为risultato riga: 1
。请使用size()
方法查找与SELECT
查询匹配的行数。
第二个问题是你将QString
对象传递给printf()
,它期望指向一个以char
值为空的数组的指针(当你使用{{时) 1}}格式说明符)。您需要将%s
对象转换为指向C数组字符的指针。