iphone 数据库(sqlite3)的用法操作

长平狐 发布于 2013/12/25 17:17
阅读 373
收藏 0

首先你在用之前要在项目中加入libsqlite3.dylib

1、定义模型

#import <Foundation/Foundation.h>
#import "sqlite3.h"
@class NotePad;
@class NoteDb;
@interface NoteSqlite : NSObject{
    sqlite3 *database;
    sqlite3_stmt *statement;
    char *errorMsg;
}
//打开数据库
-(BOOL)open;
//创建青
-(BOOL)create;

//增加、删除、修改、查询
-(BOOL)insert:(NotePad*)aNote;
-(BOOL)deleteALLNote;
-(BOOL)deleteaNote:(NotePad*)aNote;
-(BOOL)update:(NotePad*)aNote;

-(NoteDb*)selecteAll;
-(NoteDb*)selectNotes:(NotePad*)aNote;

@end

2、实现方法

#import "NoteSqlite.h"
#import "NotePad.h"
#import "NoteDb.h"
@implementation NoteSqlite

-(id)init{
    self=[super init];
    return self;
}
//打开数据库
-(BOOL)open{
    NSArray *paths= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"noteList.db"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL find = [fileManager fileExistsAtPath:path];
    //判断文件是否存在
    if (find) {
        NSLog(@"数据库文件已经存在");
        //打开数据库、返回操作是否正确
        if(sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
            NSLog(@"打开成功数据库");
        }
        return YES;
    }else{
        if(sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
            //调用createMusicList创建数据库和表
            [self create];             
            return YES;
        } else {
            sqlite3_close(database);
            NSLog(@"Error: open database file.");
            return NO;
        }
        return NO;
    }

}
//创建表
-(BOOL)create{
    //创建表语句
    const char *createSql="create table if not exists note (id integer primary key autoincrement,theme text,information text,ndate text,priority integer)"; 
    //创建表是否成功
    if (sqlite3_exec(database, createSql, NULL, NULL, &errorMsg)==SQLITE_OK) {       
        NSLog(@"create ok.");   
        return YES;
    }else{
        //打印出错信息
        NSLog(@"error: %s",errorMsg); 
        sqlite3_free(errorMsg);
    }
    return NO;

}

//增加、删除、修改、查询
-(BOOL)insert:(NotePad*)aNote{
    //向表中插入记录  
    //定义一个sql语句        
    NSString *insertStatementNS = [NSString stringWithFormat:
								   @"insert into \"note\"\
								   (theme, information, ndate,priority)\
								   values (\"%@\", \"%@\", \"%@\",%d)",
								   aNote.theme,aNote.information,[NSString stringWithFormat:@"%@",aNote.ndate],aNote.priority
                                    ];
    //将定义的NSString的sql语句,转换成UTF8的c风格的字符串
    const char *insertSql = [insertStatementNS UTF8String];
    //执行插入语句 
    if (sqlite3_exec(database, insertSql, NULL, NULL, &errorMsg)==SQLITE_OK) {  
        NSLog(@"insert ok."); 
        return YES;
    }else{
        NSLog(@"error: %s",errorMsg); 
        sqlite3_free(errorMsg);
    } 
    return NO;

}
-(BOOL)deleteALLNote{
    //删除所有数据,条件为1>0永真
    const char *deleteAllSql="delete from note where 1>0";
    //执行删除语句
    if(sqlite3_exec(database, deleteAllSql, NULL, NULL, &errorMsg)==SQLITE_OK){
        NSLog(@"删除所有数据成功");
    }
    return YES;
}
-(BOOL)deleteaNote:(NotePad*)aNote{
    //删除某条数据
    NSString *deleteString=[NSString stringWithFormat:@"delete from note where id=%d",aNote.noteId];
    //转成utf-8的c的风格
    const char *deleteSql=[deleteString UTF8String];
    //执行删除语句
    if(sqlite3_exec(database, deleteSql, NULL, NULL, &errorMsg)==SQLITE_OK){
        NSLog(@"删除成功");
    }
    return YES;
}
-(BOOL)update:(NotePad*)aNote{
    //更新语句
    NSString *updateString=[NSString stringWithFormat:@"update note set theme='%@', information='%@', ndate='%@',priority=%d where id=%d",aNote.theme,aNote.information,aNote.ndate,aNote.priority,aNote.noteId];
   // NSLog(@"%@",aNote);
    const char *updateSql=[updateString UTF8String];
    //执行更新语句
    if(sqlite3_exec(database, updateSql, NULL, NULL, &errorMsg)==SQLITE_OK){
        NSLog(@"更新成功");
    }   
    return YES;
}

-(NoteDb*)selecteAll{
    NoteDb *noteDb=[[[NoteDb alloc]init]autorelease];
    //查询所有语句
    const char *selectAllSql="select * from note";
    //执行查询
    if (sqlite3_prepare_v2(database, selectAllSql, -1, &statement, nil)==SQLITE_OK) {
        NSLog(@"select ok.");  
        //如果查询有语句就执行step来添加数据
        while (sqlite3_step(statement)==SQLITE_ROW) {
            NotePad *note=[[NotePad alloc]init];
            
            int noteid=sqlite3_column_int(statement, 0);
            NSMutableString *theme=[NSMutableString stringWithCString:(char*)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding];
            NSMutableString *information=[NSMutableString stringWithCString:(char*)sqlite3_column_text(statement, 2) encoding:NSUTF8StringEncoding];
            NSString *ndateString=[NSString stringWithCString:(char*)sqlite3_column_text(statement, 3) encoding:NSUTF8StringEncoding];
            NSDateFormatter* formater = [[NSDateFormatter alloc] init];
            [formater setDateFormat:@"yyyy-MM-dd HH🇲🇲ss"];
            
            NSDate *ndate=[formater dateFromString:[ndateString substringToIndex:[ndateString length]-5]];
           // NSLog(@"%@",[ndateString substringToIndex:[ndateString length]-5]);
            [formater release];
            int proriory=sqlite3_column_int(statement, 4);
            
            note.noteId=noteid;
            note.theme=theme;
            note.information=information;
            note.ndate=ndate;
            note.priority=proriory;
            [noteDb addNote:note];
            [note release];
            
        }
        return noteDb;
    }
    return noteDb;
}
-(NoteDb*)selectNotes:(NotePad*)aNote{
    NoteDb *noteDb=[[[NoteDb alloc]init]autorelease];
    NSString *selectNSSql=[NSString stringWithFormat:@"select * from note where id=%i",aNote.noteId];
    //查询所有语句
    const char *selectSql=[selectNSSql UTF8String];
    //执行查询
    if (sqlite3_prepare_v2(database, selectSql, -1, &statement, nil)==SQLITE_OK) {
        NSLog(@"select ok.");  
        //如果查询有语句就执行step来添加数据
        while (sqlite3_step(statement)==SQLITE_ROW) {
            NotePad *note=[[NotePad alloc]init];
            
            int noteid=sqlite3_column_int(statement, 0);
            NSMutableString *theme=[NSMutableString stringWithCString:(char*)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding];
            NSMutableString *information=[NSMutableString stringWithCString:(char*)sqlite3_column_text(statement, 2) encoding:NSUTF8StringEncoding];
            NSString *ndateString=[NSString stringWithCString:(char*)sqlite3_column_text(statement, 3) encoding:NSUTF8StringEncoding];
            NSDateFormatter* formater = [[NSDateFormatter alloc] init];
            [formater setDateFormat:@"yyyy-MM-dd HH🇲🇲ss"];
            
            NSDate *ndate=[formater dateFromString:[ndateString substringToIndex:[ndateString length]-5]];
            // NSLog(@"%@",[ndateString substringToIndex:[ndateString length]-5]);
            [formater release];
            int proriory=sqlite3_column_int(statement, 4);
            
            note.noteId=noteid;
            note.theme=theme;
            note.information=information;
            note.ndate=ndate;
            note.priority=proriory;
            [noteDb addNote:note];
            [note release];
            
        }
        return noteDb;
    }
    return noteDb;
}
@end

ok!本博客是我自己的练习,有好多地方没有讲太清楚,还请谅解!


原文链接:http://blog.csdn.net/rhljiayou/article/details/7615743
加载中
返回顶部
顶部