分享一段ios数据库代码,包括对表的创建、升级、增删查改

来源:互联网 发布:淘宝促销在哪里设置 编辑:程序博客网 时间:2024/05/28 15:26

分享一段ios数据库代码。包括创建、升级、增删查改。

 

里面的那些类不必细究,主要是数据库的代码100%可用。

 

数据库升级部分,使用switch,没有break,低版本一次向高版本修改。

复制代码
//  DB.h//iukey#import <Foundation/Foundation.h>#import "sqlite3.h"#import "User.h"#import "ChatInfo.h"#import "DescInfo.h"@interface DBHelper : NSObject{    sqlite3* db;//数据库句柄//   @public DBHelper *instance;}@property(nonatomic,assign)sqlite3* db;- (BOOL)insertUserWithTUsersName:(NSString*)name account:(NSString*)account pwd:(NSString*)pwd;- (NSMutableArray*)quary:(NSString*)str;//查询- (NSString*)getFilePath;//获取数据库路径- (BOOL)createDB;//创建数据库- (BOOL)createTable:(NSString*) creteSql;//创建表- (User*)getUserWithTUsersByAccount:(NSString* )account;- (BOOL)updateUserPwdWithTUsers:(NSString*)pwd byAccount:(NSString*)account ;//+ (DBHelper*) getDBhelperInstance;- (BOOL)deleteItemWithTable:(NSString*)table_ ByKey:(NSString*)key_ ;-(BOOL)insertChatRecordWithTChatRecordByChatInfo:(ChatInfo*)ci owner:(NSString *)owner;- (int)getRecordCountWithTChatRecordByoneJid:(NSString* )oneJid anotherJid:(NSString* )anotherJid owner:(NSString *)owner;- (NSMutableArray*)getChatInfoWithTChatRecordByoneJid:(NSString* )oneJid anotherJid:(NSString* )anotherJid fromIndex:(int)fromIndex count:(int)count owner:(NSString *)owner;- (BOOL)deleteChatInfoWithTChatRecordByoneJid:(NSString* )oneJid anotherJid:(NSString* )anotherJid owner:(NSString *)owner;-(NSMutableDictionary*)getRecordCountNotREadWithTChatRecord:(NSString*)toJid owner:(NSString *)owner;-(BOOL)updateRecordCountNotReadWithChatRecord:(NSString *)fromJid;-(NSMutableArray*)getRecordNotReadWithTChatRecordFromJid:(NSString*)fromJid owner:(NSString *)owner;//history-(BOOL)insertHistoryRecordWithTHistoryRecordByDescInfo:(DescInfo*)di account:(NSString*)account routerjid:(NSString *)routerjid;- (NSMutableArray*)getHistoryRecordWithTHistoryRecordByAccount:(NSString* )account routerjid:(NSString *)routerjid;- (BOOL)deleteHistoryWithTHistoryRecordByDeviceType:(NSString *)deviceType account:(NSString* )account routerjid:(NSString *)routerjid;- (BOOL)deleteHistoryWithTHistoryRecordById:(int)c_id account:(NSString* )account routerjid:(NSString *)routerjid;- (NSMutableArray*)getHistoryRecordWithTHistoryRecordByUDN:(NSString* )UDN withAccount:(NSString* )account routerjid:(NSString *)routerjid;-(BOOL)updateHistoryCountNotReadWithHistoryRecordByDeviceType:(NSString *)deviceType account:(NSString* )account routerjid:(NSString *)routerjid;-(int)getHistoryCountNotReadWithHistoryRecordByAccount:(NSString *)account routerjid:(NSString *)routerjid;@end
复制代码

 

复制代码
//  DB.m//iukey#import "DBHelper.h"#import "YHConfig.h"#import "DescInfo.h"#import "FromJid.h"// tid ----table index id@implementation DBHelperstatic  NSString *createTB_user=@"create table if not exists t_users (c_account text primary key ,c_name text,c_pwd text)";/* info_ key-value db_version --1 ... */static  NSString *createTB_info=@"create table if not exists t_info (c_key text primary key ,c_value text)";/* c_time 存储1970秒数 */static  NSString *createTB_chat_record=@"create table if not exists t_chat_record (c_id integer primary key autoincrement,c_from_jid text,c_to_jid text,c_chat_time integer,c_msg text,c_has_read integer)";static NSString *createTB_history_record=@"create table if not exists t_history_record (c_id integer primary key autoincrement,c_deviceType text,c_UDN text,c_friendlyName text,c_history_time integer,c_desc text)";@synthesize db;- (id)init{    self = [super init];        int dbVersion =0;    //检查是否存在数据库文件    if (![self isExistDB]) {        //不存在,则创建         [self createDB];    }else {        //若存在,检测数据库版本,则进行升级,        char* info=NULL;        [self getDBInfoValueWithKey:"db_version" value:&info];        if(info == NULL){            return self;        }        dbVersion= atoi(info);        free (info);                    }    //升级数据库。若第一次创建,则从0开始升级。顺序升级,因此不可以有break    switch (dbVersion) {        case 0:            //第一次,新建并初始化各表            [self createTable:createTB_user];            //记录版本            [self createTable:createTB_info];            [self setDBInfoValueWithKey:"db_version" value:"1"];                        [self createTable:createTB_chat_record];            [self createTable:createTB_history_record];                    case 1:            [self setDBInfoValueWithKey:"db_version" value:"2"];        case 2:        {            NSString *modify=@"alter table t_history_record add column c_user text not null default ''";            [self setDBInfoValueWithKey:"db_version" value:"3"];            [self execSql:modify];        }        case 3:        {            NSString *modify=@"alter table t_chat_record add column c_owner text not null default ''";            [self setDBInfoValueWithKey:"db_version" value:"4"];            [self execSql:modify];        }        case 4:        {            NSString *modify=@"alter table t_history_record add column c_router text not null default ''";            [self setDBInfoValueWithKey:"db_version" value:"5"];            [self execSql:modify];        }        case 5:        {            NSString *modify=@"alter table t_history_record add column c_has_read integer not null default ''";            [self setDBInfoValueWithKey:"db_version" value:"6"];            [self execSql:modify];        }            //注:数据库升级时候,只需要一次添加case即可,同时更新<span style="font-family: Arial, Helvetica, sans-serif;">db_version值</span>        /*        case 3:        {         //先不加密            //1、将db文件移至portrait,并重命名yunho.db->_yunho.png            //2、得到所有的密码,使用base64存储            //3、用户名输入时候能自动检测是否有匹配的密码并实时的显示            //            NSString *modify=@"alter table t_history_record add column c_user text not null default ''";//            [self setDBInfoValueWithKey:"db_version" value:" 4"];//            [self execSql:modify];        }         */        default:            break;    }    return self;}- (NSString*)getFilePath{//get db path    NSArray *documentsPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask  , YES);     NSString *databaseFilePath=[[documentsPaths objectAtIndex:0] stringByAppendingPathComponent:[YHConfig DBName ]];    return databaseFilePath ;}#pragma mark db manage- (BOOL)createDB{    int ret = sqlite3_open([[self getFilePath] UTF8String], &db);//打开数据库,数据库不存在则创建    if (SQLITE_OK == ret) {//创建成功        sqlite3_close(db);//关闭        return YES;    }else{        return NO;//创建失败    }}-(BOOL) isExistDB{    NSFileManager* fm = [[[NSFileManager alloc] init]autorelease];    return [fm fileExistsAtPath:[self getFilePath] ];}/* create table dictionary(ID integer primary key autoincrement,en nvarchar(64),cn nvarchar(128),comment nvarchar(256)) */- (BOOL)dropTableWithTableName:(NSString*) tableName{    NSString* dropSql = [[NSString alloc] initWithFormat:@"delete table %@",tableName];    return [self execSql:[dropSql autorelease]];}- (BOOL)createTable:(NSString*) creteSql{    return [self execSql:creteSql];   }-(BOOL) execSql:(NSString*) creteSql{    char* err;    const char* sql = [creteSql UTF8String];//创建表语句    if (sql==NULL) {        return NO;    }    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String], &db)){        return NO;    }        if (SQLITE_OK == sqlite3_exec(db, sql, NULL, NULL, &err)) {//执行创建表语句成功        sqlite3_close(db);        return YES;    }else{//创建表失败        return NO;    }}//"select * from dictionary where en like ? or cn like ? or comment like ?;";//查询语句//TODO- (NSMutableArray*)quary:(NSString *) querySql{        if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String], &db)){        return nil;    }        const char* sql = [querySql UTF8String];//查询语句    sqlite3_stmt* stmt;    if (sqlite3_prepare_v2(db, sql, -1, &stmt, nil)==SQLITE_OK) {//准备        //        sqlite3_bind_text(stmt, 1,[[NSString stringWithFormat:@"%%%@%%",str]UTF8String], -1, NULL);        //        sqlite3_bind_text(stmt, 2, [[NSString stringWithFormat:@"%%%@%%",str]UTF8String], -1, NULL);        //        sqlite3_bind_text(stmt, 3, [[NSString stringWithFormat:@"%%%@%%",str]UTF8String], -1, NULL);    }else{        return nil;    }    NSMutableArray* arr =[[NSMutableArray alloc]init];//存放查询结果    while( SQLITE_ROW == sqlite3_step(stmt) ){//执行        char* _en = (char*)sqlite3_column_text(stmt, 1);        char* _cn = (char*)sqlite3_column_text(stmt, 2);        char* _comment = (char*)sqlite3_column_text(stmt, 3);                NSMutableDictionary* dict = [[NSMutableDictionary alloc]init];//单条纪录        [dict setObject:[NSString stringWithCString:_en encoding:NSUTF8StringEncoding] forKey:@"kEN"];        [dict setObject:[NSString stringWithCString:_cn encoding:NSUTF8StringEncoding] forKey:@"kCN"];        [dict setObject:[NSString stringWithCString:_comment encoding:NSUTF8StringEncoding] forKey:@"kCOMMENT"];        [arr addObject:dict];//插入到结果数组        [dict release];    }    sqlite3_finalize(stmt);    sqlite3_close(db);    return [arr autorelease];//返回查询结果数组}#pragma mark  table t_info manage- (void)getDBInfoValueWithKey:(const char*)key value:(char**)value{    //TODO    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String] , &db)){        printf("%s:%d query error..\n",__FUNCTION__,__LINE__);        return ;    }    const char* sql = "select * from t_info where c_key =?";//查询语句    sqlite3_stmt* stmt;            int error = sqlite3_prepare_v2(db, sql, -1, &stmt, nil);    if (error==SQLITE_OK) {//准备        sqlite3_bind_text(stmt, 1,key, -1, NULL);    }else{        printf("%s:%d query error.. %d\n",__FUNCTION__,__LINE__,error);        return;    }            if( SQLITE_ROW == sqlite3_step(stmt) ){//执行         char* v= (char*)sqlite3_column_text(stmt, 1);        *value = strdup(v);            }    sqlite3_finalize(stmt);    sqlite3_close(db);}- (BOOL)setDBInfoValueWithKey:(const char*)key value:(const char*)value {    char* info=NULL;    [self getDBInfoValueWithKey:key value:&info];    if (info!= NULL) {        //存在,则更新        [self updateDBInfoValueWithKey:key value:value];    }else{        //不存在,插入        [self insertDBInfoValueWithKey:key value:value];            }    free(info);    return YES;}- (BOOL)insertDBInfoValueWithKey:(const char*)key value:(const char*)value{    int ret = 0;    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String], &db)){        return NO;    }    const char* sql = "insert into t_info(c_key,c_value) values(?,?);";    sqlite3_stmt* stmt;//    int result =sqlite3_prepare_v2(db, sql, -1, &stmt, nil);    printf("%s\n",sqlite3_errmsg(db));    if (result==SQLITE_OK) {//准备语句        sqlite3_bind_text(stmt, 1, key, -1, NULL);//绑定参数        sqlite3_bind_text(stmt, 2, value, -1, NULL);    }else{        return NO;    }    if (SQLITE_DONE == (ret = sqlite3_step(stmt))) {//执行查询        sqlite3_finalize(stmt);        sqlite3_close(db);        return YES;    }else{        return NO;    }}- (BOOL)updateDBInfoValueWithKey:(const char*)key value:(const char*)value{    int ret = 0;    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String], &db)){        return NO;    }    const char* sql = "update t_info set c_value = ? where c_key = ?;";    sqlite3_stmt* stmt;//    int result =sqlite3_prepare_v2(db, sql, -1, &stmt, nil);    printf("%s\n",sqlite3_errmsg(db));    if (result==SQLITE_OK) {//准备语句        sqlite3_bind_text(stmt, 1, value, -1, NULL);        sqlite3_bind_text(stmt, 2, key, -1, NULL);    }else{        return NO;    }    ret = sqlite3_step(stmt);    printf("ret:%d\n",ret);    if (SQLITE_DONE ==ret ) {//执行查询        sqlite3_finalize(stmt);        sqlite3_close(db);        return YES;    }else{        return NO;    }}#pragma mark table "t_users" manage- (User*)getUserWithTUsersByAccount:(NSString* )account{            if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String] , &db)){        return nil;    }        const char* sql = "select * from t_users where c_account = ?";//查询语句    sqlite3_stmt* stmt;    if (sqlite3_prepare_v2(db, sql, -1, &stmt, nil)==SQLITE_OK) {//准备        sqlite3_bind_text(stmt, 1,[account UTF8String], -1, NULL);    }else{        return nil;    }    User* user = nil;    if( SQLITE_ROW == sqlite3_step(stmt) ){//执行        user = [[[User alloc]init]autorelease];        NSString *name=nil;        NSString *pwd= nil;        if (sqlite3_column_text(stmt, 0) != NULL) {            name = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 0)];                    }        if (sqlite3_column_text(stmt,2 ) != NULL) {            pwd = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 2)];        }                        user.name =name;        user.account= account;        user.pwd = pwd;    }        sqlite3_finalize(stmt);    sqlite3_close(db);    return  user;}- (BOOL)insertUserWithTUsersName:(NSString*)name account:(NSString*)account pwd:(NSString*)pwd{    int ret = 0;    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String], &db)){//打开数据库        return NO;    }    const char* sql = "insert into t_users(c_name,c_account,c_pwd) values(?,?,?);";    sqlite3_stmt* stmt;//    int result =sqlite3_prepare_v2(db, sql, -1, &stmt, nil);    printf("%s\n",sqlite3_errmsg(db));    if (result==SQLITE_OK) {//准备语句        sqlite3_bind_text(stmt, 1, [name UTF8String], -1, NULL);//绑定参数        sqlite3_bind_text(stmt, 2, [account UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 3, [pwd UTF8String], -1, NULL);    }else{        return NO;    }    if (SQLITE_DONE == (ret = sqlite3_step(stmt))) {//执行查询        sqlite3_finalize(stmt);        sqlite3_close(db);        return YES;    }else{        return NO;    }}//根据account 修改用户 的name和pwd- (BOOL)updateUserPwdWithTUsers:(NSString*)pwd byAccount:(NSString*)account {    int ret = 0;    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String], &db)){//打开数据库        return NO;    }    const char* sql = "update t_users set c_pwd = ? where c_account = ?";    sqlite3_stmt* stmt;//    int result =sqlite3_prepare_v2(db, sql, -1, &stmt, nil);    printf("%s\n",sqlite3_errmsg(db));    if (result==SQLITE_OK) {//准备语句        sqlite3_bind_text(stmt, 1, [pwd UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 2, [account UTF8String], -1, NULL);    }else{        return NO;    }    if (SQLITE_DONE == (ret = sqlite3_step(stmt))) {//执行查询        sqlite3_finalize(stmt);        sqlite3_close(db);        return YES;    }else{        return NO;    }}#pragma mark table "t_chat_record" manage-(BOOL)insertChatRecordWithTChatRecordByChatInfo:(ChatInfo*)ci owner:(NSString *)owner{    int ret = 0;    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String], &db)){//打开数据库        return NO;    }    //@"create table if not exists t_chat_record (c_id text primary key ,c_from_jid text,c_to_jid text,c_chat_time integer,c_msg text)";    const char* sql = "insert into t_chat_record(c_from_jid,c_to_jid,c_chat_time,c_msg,c_has_read,c_owner) values(?,?,?,?,?,?);";    sqlite3_stmt* stmt;//    int result =sqlite3_prepare_v2(db, sql, -1, &stmt, nil);    printf("%s\n",sqlite3_errmsg(db));    if (result==SQLITE_OK) {//准备语句        sqlite3_bind_text(stmt, 1, [[ci fromJid] UTF8String], -1, NULL);//绑定参数        sqlite3_bind_text(stmt, 2, [[ci toJid] UTF8String], -1, NULL);        sqlite3_bind_int(stmt, 3, (int)[ci.chatTime timeIntervalSince1970] );        sqlite3_bind_text(stmt, 4, [ci.msg UTF8String], -1, NULL);        sqlite3_bind_int(stmt, 5, [ci hasRead]);        sqlite3_bind_text(stmt, 6, [owner UTF8String], -1, NULL);        log4debug(@"%d",[ci hasRead]);    }else{        return NO;    }    if (SQLITE_DONE == (ret = sqlite3_step(stmt))) {//执行查询        sqlite3_finalize(stmt);        sqlite3_close(db);        return YES;    }else{        return NO;    }}//update the count of chat record not read-(BOOL)updateRecordCountNotReadWithChatRecord:(NSString *)fromJid{    int ret = 0;    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String] , &db)){        return nil;    }    const char* sql = "update t_chat_record set c_has_read = 1 where c_from_jid = ?";//修改语句    sqlite3_stmt* stmt;    if (sqlite3_prepare_v2(db, sql, -1, &stmt, nil)==SQLITE_OK) {//准备            sqlite3_bind_text(stmt, 1, [fromJid UTF8String], -1, NULL);                  }else{            return nil;        }    if (SQLITE_DONE == (ret = sqlite3_step(stmt))) {//执行查询        sqlite3_finalize(stmt);        sqlite3_close(db);        return YES;    }else{        return NO;    }       }-(NSMutableArray*)getRecordNotReadWithTChatRecordFromJid:(NSString*)fromJid owner:(NSString *)owner{    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String] , &db)){        return nil;    }    const char* sql = "select c_chat_time,c_msg from t_chat_record where c_has_read = 0 and c_from_jid =? and c_owner =? order by c_chat_time asc";//查询语句    sqlite3_stmt* stmt;    if (sqlite3_prepare_v2(db, sql, -1, &stmt, nil)==SQLITE_OK) {//准备       sqlite3_bind_text(stmt, 1,[fromJid UTF8String], -1, NULL);       sqlite3_bind_text(stmt, 2,[owner UTF8String], -1, NULL);    }else{        return nil;    }        NSMutableArray* msgs=[[[NSMutableArray alloc]init]autorelease];    while ( SQLITE_ROW == sqlite3_step(stmt) ){//执行        NSString *msg=nil;        int chatTime = 0;        if (sqlite3_column_text(stmt, 1) != NULL) {            msg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 1)];                    }        chatTime = sqlite3_column_int(stmt, 0);        NSDate * showTime = [NSDate dateWithTimeIntervalSince1970:chatTime];        [msgs addObject:showTime];        [msgs addObject:msg];    }        sqlite3_finalize(stmt);    sqlite3_close(db);    return msgs ;}//get the count of the chat record not read-(NSMutableDictionary*)getRecordCountNotREadWithTChatRecord:(NSString*)toJid owner:(NSString *)owner{    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String] , &db)){        return nil;    }    const char* sql = "select c_from_jid, count(*) from t_chat_record where c_has_read = 0 and c_to_jid =? and c_owner =? group by c_from_jid ";//查询语句    sqlite3_stmt* stmt;    if (sqlite3_prepare_v2(db, sql, -1, &stmt, nil)==SQLITE_OK) {//准备             sqlite3_bind_text(stmt, 1,[toJid UTF8String], -1, NULL);             sqlite3_bind_text(stmt, 2,[owner UTF8String], -1, NULL);    }else{        return nil;    }        NSMutableDictionary* fis=[[[NSMutableDictionary alloc]init]autorelease];    while ( SQLITE_ROW == sqlite3_step(stmt) ){//执行       FromJid* fi  = [[[FromJid alloc]init]autorelease];        NSString *fromJid=nil;        int noReadCount = 0;                        if (sqlite3_column_text(stmt, 0) != NULL) {            fromJid = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 0)];        }        noReadCount = sqlite3_column_int(stmt, 1);                fi.fromJid = fromJid;        fi.noReadCount = noReadCount;        [fis setObject:fi forKey:fi.fromJid];    }    sqlite3_finalize(stmt);    sqlite3_close(db);    return fis ;}//get the count of the chat record- (int)getRecordCountWithTChatRecordByoneJid:(NSString* )oneJid anotherJid:(NSString* )anotherJid owner:(NSString *)owner{    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String] , &db)){        return nil;    }    //static  NSString *createTB_chat_record=@"create table if not exists t_chat_record (c_id integer primary key autoincrement,c_from_jid text,c_to_jid text,c_chat_time integer,c_msg text)";    //不区分from&to,因此两个条件查询    const char* sql = "select count (*) from t_chat_record where ((c_from_jid = ? and c_to_jid=?) or  (c_from_jid = ? and c_to_jid=?)) and c_owner = ?";//查询语句    sqlite3_stmt* stmt;    if (sqlite3_prepare_v2(db, sql, -1, &stmt, nil)==SQLITE_OK) {//准备        sqlite3_bind_text(stmt, 1,[oneJid UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 2,[anotherJid UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 3,[anotherJid UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 4,[oneJid UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 5,[owner UTF8String], -1, NULL);    }else{        return nil;    }    int count=0;    if ( SQLITE_ROW == sqlite3_step(stmt) ){//执行        count=sqlite3_column_int(stmt, 0);    }        sqlite3_finalize(stmt);    sqlite3_close(db);    return  count ;}- (NSMutableArray*)getChatInfoWithTChatRecordByoneJid:(NSString* )oneJid anotherJid:(NSString* )anotherJid fromIndex:(int)fromIndex count:(int)count owner:(NSString *)owner{    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String] , &db)){        return nil;    }    //static  NSString *createTB_chat_record=@"create table if not exists t_chat_record (c_id integer primary key autoincrement,c_from_jid text,c_to_jid text,c_chat_time integer,c_msg text)";    //不区分from&to,因此两个条件查询      const char* sql = "select * from t_chat_record where ((c_from_jid = ? and c_to_jid=?) or  (c_from_jid = ? and c_to_jid=?)) and c_owner = ? order by c_chat_time asc limit ?,?  ";//查询语句    sqlite3_stmt* stmt;    if (sqlite3_prepare_v2(db, sql, -1, &stmt, nil)==SQLITE_OK) {//准备         sqlite3_bind_text(stmt, 1,[oneJid UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 2,[anotherJid UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 3,[anotherJid UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 4,[oneJid UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 5,[owner UTF8String], -1, NULL);        sqlite3_bind_int(stmt, 6, fromIndex);        sqlite3_bind_int(stmt, 7, count);    }else{        return nil;    }    NSMutableArray *cis=[[[NSMutableArray alloc]initWithCapacity:3]autorelease];    while ( SQLITE_ROW == sqlite3_step(stmt) ){//执行        ChatInfo* ci  = [[[ChatInfo alloc]init]autorelease];        NSString *fromJid=nil;        NSString *toJid= nil;        NSString *msg=nil;              int time = 0;        if (sqlite3_column_text(stmt, 1) != NULL) {            fromJid = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 1)];        }        if (sqlite3_column_text(stmt,2 ) != NULL) {            toJid = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 2)];        }        if (sqlite3_column_text(stmt,3 ) != NULL) {            time = sqlite3_column_int(stmt, 3);        }        if (sqlite3_column_text(stmt,4 ) != NULL) {            msg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 4)];        }        ci.fromJid=fromJid;        ci.toJid=toJid;        ci.chatTime=[NSDate dateWithTimeIntervalSince1970:time];        ci.msg=msg;        [cis addObject:ci];    }        sqlite3_finalize(stmt);    sqlite3_close(db);    return  cis ;}- (BOOL)deleteChatInfoWithTChatRecordByoneJid:(NSString* )oneJid anotherJid:(NSString* )anotherJid owner:(NSString *)owner{    int ret = 0;    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String], &db)){//打开数据库        return NO;    }    NSString* sql = [NSString stringWithFormat:@"delete from t_chat_record where ((c_from_jid = ? and c_to_jid=?) or  (c_from_jid = ? and c_to_jid=?)) and c_owner = ?"];    sqlite3_stmt* stmt;//    int result =sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);    printf("%s\n",sqlite3_errmsg(db));    if (result==SQLITE_OK) {//准备语句        sqlite3_bind_text(stmt, 1,[oneJid UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 2,[anotherJid UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 3,[anotherJid UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 4,[oneJid UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 5,[owner UTF8String], -1, NULL);    }else{        return NO;    }    if (SQLITE_DONE == (ret = sqlite3_step(stmt))) {//执行查询        sqlite3_finalize(stmt);        sqlite3_close(db);        return YES;    }else{        return NO;    }    }#pragma mark table "t_history_record" manage-(BOOL)insertHistoryRecordWithTHistoryRecordByDescInfo:(DescInfo*)di account:(NSString*)account routerjid:(NSString *)routerjid{    int ret = 0;    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String], &db)){//打开数据库        return NO;    }    //@"create table if not exists t_history_record (c_id text primary key ,c_deviceType text,c_UDN text,c_friendlyName text,c_history_time integer,c_desc text)";    const char* sql = "insert into t_history_record(c_deviceType,c_UDN,c_friendlyName,c_history_time,c_desc,c_user,c_router,c_has_read) values(?,?,?,?,?,?,?,?);";    sqlite3_stmt* stmt;//    int result =sqlite3_prepare_v2(db, sql, -1, &stmt, nil);    printf("%s\n",sqlite3_errmsg(db));    if (result==SQLITE_OK) {//准备语句        sqlite3_bind_text(stmt, 1, [[di deviceType] UTF8String], -1, NULL);//绑定参数        sqlite3_bind_text(stmt, 2, [[di deviceUDN] UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 3, [[di friendlyName] UTF8String], -1, NULL);        sqlite3_bind_int(stmt, 4, (int)[di.time timeIntervalSince1970] );        sqlite3_bind_text(stmt, 5, [di.deviceDesc UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 6, [account UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 7, [routerjid UTF8String], -1, NULL);        sqlite3_bind_int(stmt, 8, [di hasRead]);    }else{        return NO;    }    if (SQLITE_DONE == (ret = sqlite3_step(stmt))) {//执行查询        sqlite3_finalize(stmt);        sqlite3_close(db);        return YES;    }else{        return NO;    }    }- (NSMutableArray*)getHistoryRecordWithTHistoryRecordByUDN:(NSString* )UDN withAccount:(NSString* )account routerjid:(NSString *)routerjid{    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String] , &db)){        return nil;    }    const char* sql = "select * from t_history_record where c_UDN = ? and c_user =? and c_router =? order by c_history_time desc";//查询语句    sqlite3_stmt* stmt;    if (sqlite3_prepare_v2(db, sql, -1, &stmt, nil)==SQLITE_OK) {//准备        sqlite3_bind_text(stmt, 1,[UDN UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 2,[account UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 3,[routerjid UTF8String], -1, NULL);    }else{        return nil;    }    NSMutableArray *dis=[[[NSMutableArray alloc]initWithCapacity:5]autorelease];    while ( SQLITE_ROW == sqlite3_step(stmt) ){//执行        DescInfo* di  = [[[DescInfo alloc]init]autorelease];        NSString* deviceType = nil;        NSString* friendlyName= nil;        NSString* deviceUDN= nil;        NSString* deviceDesc= nil;        NSDate* time= nil;        int c_id = 0;        if (sqlite3_column_text(stmt, 0) != NULL) {            c_id = sqlite3_column_int(stmt, 0);                    }        if (sqlite3_column_text(stmt, 1) != NULL) {            deviceType = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 1)];        }        if (sqlite3_column_text(stmt,2 ) != NULL) {            deviceUDN = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 2)];        }        if (sqlite3_column_text(stmt,3 ) != NULL) {            friendlyName = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 3)];        }        if (sqlite3_column_text(stmt,4 ) != NULL) {            int i  = sqlite3_column_int(stmt, 4);            time = [NSDate dateWithTimeIntervalSince1970:i];            //            time = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 4)];        }        if (sqlite3_column_text(stmt,5 ) != NULL) {            deviceDesc = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 5)];        }        di.deviceType=deviceType;        di.deviceUDN=deviceUDN;        di.friendlyName=friendlyName;        di.time = time;        di.deviceDesc =deviceDesc;        di.c_id = c_id;        [dis addObject:di];    }        sqlite3_finalize(stmt);    sqlite3_close(db);    return  dis ;}- (NSMutableArray*)getHistoryRecordWithTHistoryRecordByAccount:(NSString* )account routerjid:(NSString *)routerjid{    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String] , &db)){        return nil;    }    const char* sql = "select * from t_history_record where c_user = ? and c_router = ? order by c_history_time desc";//查询语句    sqlite3_stmt* stmt;    if (sqlite3_prepare_v2(db, sql, -1, &stmt, nil)==SQLITE_OK) {//准备        sqlite3_bind_text(stmt, 1,[account UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 2,[routerjid UTF8String], -1, NULL);    }else{        return nil;    }    NSMutableArray *dis=[[[NSMutableArray alloc]initWithCapacity:5]autorelease];    while ( SQLITE_ROW == sqlite3_step(stmt) ){//执行       DescInfo* di  = [[[DescInfo alloc]init]autorelease];         NSString* deviceType = nil;         NSString* friendlyName= nil;          NSString* deviceUDN= nil;         NSString* deviceDesc= nil;        NSDate* time= nil;        int c_id = 0;        if (sqlite3_column_text(stmt, 0) != NULL) {            c_id = sqlite3_column_int(stmt, 0);                    }        if (sqlite3_column_text(stmt, 1) != NULL) {            deviceType = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 1)];        }        if (sqlite3_column_text(stmt,2 ) != NULL) {           deviceUDN = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 2)];        }        if (sqlite3_column_text(stmt,3 ) != NULL) {            friendlyName = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 3)];        }        if (sqlite3_column_text(stmt,4 ) != NULL) {            int i  = sqlite3_column_int(stmt, 4);            time = [NSDate dateWithTimeIntervalSince1970:i];//            time = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 4)];        }        if (sqlite3_column_text(stmt,5 ) != NULL) {            deviceDesc = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 5)];        }        di.deviceType=deviceType;        di.deviceUDN=deviceUDN;        di.friendlyName=friendlyName;        di.time = time;        di.deviceDesc =deviceDesc;        di.c_id = c_id;        [dis addObject:di];    }        sqlite3_finalize(stmt);    sqlite3_close(db);    return  dis ;}- (BOOL)deleteHistoryWithTHistoryRecordByDeviceType:(NSString *)deviceType account:(NSString* )account routerjid:(NSString *)routerjid{    int ret = 0;    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String], &db)){//打开数据库        return NO;    }    NSString* sql = [NSString stringWithFormat:@"delete from t_history_record where c_deviceType = ? and c_user = ? and c_router = ?"];    sqlite3_stmt* stmt;//    int result =sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);    printf("%s\n",sqlite3_errmsg(db));    if (result==SQLITE_OK) {//准备语句        sqlite3_bind_text(stmt, 1, [deviceType UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 2, [account UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 3, [routerjid UTF8String], -1, NULL);    }else{        return NO;    }    if (SQLITE_DONE == (ret = sqlite3_step(stmt))) {//执行查询        sqlite3_finalize(stmt);        sqlite3_close(db);        return YES;    }else{        return NO;    }}- (BOOL)deleteHistoryWithTHistoryRecordById:(int)c_id account:(NSString* )account routerjid:(NSString *)routerjid{    int ret = 0;    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String], &db)){//打开数据库        return NO;    }    NSString* sql = [NSString stringWithFormat:@"delete from t_history_record where c_id = ? and c_user = ? and c_router = ?"];    sqlite3_stmt* stmt;//    int result =sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);    printf("%s\n",sqlite3_errmsg(db));    if (result==SQLITE_OK) {//准备语句//        sqlite3_bind_text(stmt, 1, [c_id UTF8String], -1, NULL);        sqlite3_bind_int(stmt, 1, c_id);        sqlite3_bind_text(stmt, 2, [account UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 3, [routerjid UTF8String], -1, NULL);    }else{        return NO;    }    if (SQLITE_DONE == (ret = sqlite3_step(stmt))) {//执行查询        sqlite3_finalize(stmt);        sqlite3_close(db);        return YES;    }else{        return NO;    }}//update the count of history record not read-(BOOL)updateHistoryCountNotReadWithHistoryRecordByDeviceType:(NSString *)deviceType account:(NSString* )account routerjid:(NSString *)routerjid{    int ret = 0;    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String] , &db)){        return nil;    }    NSString * sql = [NSString stringWithFormat:@"update t_history_record set c_has_read = 1 where c_deviceType = ? and c_user = ? and c_router = ?"];//查询语句    sqlite3_stmt* stmt;//    int result =sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);    printf("%s\n",sqlite3_errmsg(db));    if (result==SQLITE_OK) {//准备        sqlite3_bind_text(stmt, 1, [deviceType UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 2, [account UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 3, [routerjid UTF8String], -1, NULL);    }else{        return nil;    }    if (SQLITE_DONE == (ret = sqlite3_step(stmt))) {//执行查询        sqlite3_finalize(stmt);        sqlite3_close(db);        return YES;    }else{        return NO;    }}-(int)getHistoryCountNotReadWithHistoryRecordByAccount:(NSString *)account routerjid:(NSString *)routerjid{    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String] , &db)){        return nil;    }    NSString * sql = [NSString stringWithFormat:@"select count (*) from t_history_record where c_has_read = 0 and c_user = ? and c_router = ?"];//查询语句    sqlite3_stmt* stmt;//    int result =sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);    printf("%s\n",sqlite3_errmsg(db));    if (result==SQLITE_OK) {//准备        sqlite3_bind_text(stmt, 1, [account UTF8String], -1, NULL);        sqlite3_bind_text(stmt, 2, [routerjid UTF8String], -1, NULL);    }else{        return nil;    }    int count=0;    if ( SQLITE_ROW == sqlite3_step(stmt) ){//执行        count=sqlite3_column_int(stmt, 0);    }        sqlite3_finalize(stmt);    sqlite3_close(db);    return  count ;}#pragma mark manage normal tables- (BOOL)deleteItemWithTable:(NSString*)table_ ByKey:(NSString*)key_ {    int ret = 0;    if (SQLITE_OK != sqlite3_open([[self getFilePath] UTF8String], &db)){//打开数据库        return NO;    }    NSString* sql= [NSString stringWithFormat:@"delete from  %@  where  c_account =  ?",table_];         sqlite3_stmt* stmt;//    int result =sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);    printf("%s\n",sqlite3_errmsg(db));    if (result==SQLITE_OK) {//准备语句        sqlite3_bind_text(stmt, 1, [key_ UTF8String], -1, NULL);    }else{        return NO;    }    if (SQLITE_DONE == (ret = sqlite3_step(stmt))) {//执行查询        sqlite3_finalize(stmt);        sqlite3_close(db);        return YES;    }else{        return NO;    }}@end
复制代码


转自:http://www.cnblogs.com/ygm900/p/3570849.html




0 0