检查某个记录之后或FMDB中某个记录之前是否存在行

时间:2014-02-24 04:36:13

标签: ios database sqlite fmdb

我正在创建一个应用程序,它要求我遍历存储在内部SQLite数据库中的数据列表。我在我的应用程序中使用FMDB进行所有数据库操作。如果显示的数据有下一条记录或以前的记录,我希望我的“下一页”和“上一页”可用,否则,按钮将被禁用以进行相应的操作。我发送用户点击数据列表的数据的id转到“数据视图区”。

我的表结构是

create table messagelist(id int primary key, title text, time text, message text)

在“数据视图区”中,我解除了查询

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSString *path = [docsPath stringByAppendingPathComponent:@"message.sqlite"];
FMDatabase *database = [FMDatabase databaseWithPath:path];
[database open];
NSString *query = @"SELECT *,(SELECT id FROM messagelist WHERE id < ";
query = [query stringByAppendingString:[NSString stringWithFormat:@"%@",_id_row]];
query = [query stringByAppendingString:@" ORDER BY id DESC LIMIT 1) AS previous_id,(SELECT id FROM messagelist WHERE id > "];
query = [query stringByAppendingString:[NSString stringWithFormat:@"%@",_id_row]];
query = [query stringByAppendingString:@" ORDER BY id ASC LIMIT 1) AS next_id FROM messagelist WHERE id = "];
query = [query stringByAppendingString:[NSString stringWithFormat:@"%@",_id_row]];
FMResultSet *results_one = [database executeQuery:query];
if([results_one next])
{

    NSLog(@"Previous id is %d and next id is %d", [results_one intForColumn:@"previous_id"],[results_one intForColumn:@"next_id"]);
}

这并没有返回任何东西,但是我的应用程序的Android版本正在使用此查询。我在哪里做错了?

N:B: - 我只是通过导入SQLite浏览器来查看数据库,我发现没有插入ID,怎么可能,id被声明为主键因此它应该自动插入并相应增加

1 个答案:

答案 0 :(得分:0)

我自己解决了。我写的没有插入主键 创建表消息列表(id int主键,标题文本,时间文本,消息文本)而不是 创建表消息列表(id INTEGER PRIMARY KEY,标题文本,时间文本,消息文本)

解决!!!!