【发布时间】:2011-06-27 17:58:17
【问题描述】:
背景
我整天都在试图解决一个问题,我阅读了我在 Internet 上可以找到的所有文章和文档,但我无法解决这个问题。我正在为 iPhone 编写一个应用程序,我需要使用 sqlite 数据库 (sqlite3)。
主要问题
我已经创建了我的数据库并且一切都很顺利,直到我想计算我表中的行数。表名是ARTICLES,所以我写了
SELECT COUNT(*) FROM ARTICLES
我的程序什么都不做,并在日志中写入:未知错误。
const char *query = "SELECT COUNT (*) FROM ARTICLES";
sqlite3_stmt *compiledQuery;
sqlite3_prepare_v2(database, query, -1, &compiledQuery, NULL);
程序在上述代码中给出消息“未知错误”,我无法获得行数。 谁能帮我解决这个问题......或者可能是sqlite的东西不正确?
代码
- (int) GetArticlesCount
{
if (sqlite3_open([self.dataBasePath UTF8String], &articlesDB) == SQLITE_OK)
{
const char* sqlStatement = "SELECT COUNT(*) FROM ARTICLES";
sqlite3_stmt *statement;
if( sqlite3_prepare_v2(articlesDB, sqlStatement, -1, &statement, NULL) == SQLITE_OK )
{
if( sqlite3_step(statement) == SQLITE_DONE )
{
}
else
{
NSLog( @"Failed from sqlite3_step. Error is: %s", sqlite3_errmsg(articlesDB) );
}
}
else
{
NSLog( @"Failed from sqlite3_prepare_v2. Error is: %s", sqlite3_errmsg(articlesDB) );
}
// Finalize and close database.
sqlite3_finalize(statement);
sqlite3_close(articlesDB);
}
return 0;
}
在这一行出现未知错误:
NSLog( @"Failed from sqlite3_step. Error is: %s", sqlite3_errmsg(articlesDB) );
我必须在代码中添加什么或者我必须做什么才能获得行数?请帮忙...
工作代码(无效)
const char* sqlStatement = "SELECT * FROM ARTICLES";
sqlite3_stmt *statement;
if( sqlite3_prepare_v2(articlesDB, sqlStatement, -1, &statement, NULL) == SQLITE_OK )
{
int count = 0;
while( sqlite3_step(statement) == SQLITE_ROW )
count++;
}
我得到了正确的行数!但我不认为这是一种有效的方法......我认为使用 sqlite 的东西不正确......
【问题讨论】: