Sqlite的使用

来源:互联网 发布:天书残卷弓箭突破数据 编辑:程序博客网 时间:2024/05/04 20:38
(1)创建数据库,先创建数据库文件
NSString*pathString = [NSHomeDirectory()stringByAppendingString:@"/Documents/Note.sqlite"];
打开数据库
sqlite3_open()函数有两个参数第一个参数是路径的名字装换成utf8编码,第二个为数据库对象。此步骤为打开数据库,如果打开成功函数返回SQLITE_OK.调用打开数据库函数需用sqlite3_close(db);关闭函数关闭.
if(sqlite3_open([pathStringUTF8String], &db)!=SQLITE_OK) {
       
NSLog(@"打开数据库失败!");
       
sqlite3_close(db);
    }
else{
       char *err;
创建SQL语句,此语句为创建表并指明表中包含的字段.
       NSString*createSQL = [NSStringstringWithFormat:@"CREATE TABLE USER (name TEXT NOT NULL, age INTEGER, sex TEXT, image BLOB, id INTEGER PRIMARY KEY AUTOINCREMENT)"];
通过调用sqlite3_exec()函数来执行SQL语句,此函数第一个参数为数据库第二个参数为SQL语句,第五格参数为错误信息。
       if(sqlite3_exec(db, [createSQLUTF8String],NULL,NULL, &err)!=SQLITE_OK) {
           
NSLog(@"创建表失败!");
        }
else{
           
sqlite3_close(db);
        }
       
sqlite3_close(db);
    }
(2)查询数据库,查询数据库先打开数据库同上
定义SQL查询语句NSString*qSQL = @"SELECT * FROM USER where name =?";
sqlite3_stmt*statement;//占位符绑定参数的宿主语句
调用sqlite3_prepare_v2()函数编译SQL语句,编译后会使查询效率提高(个人理解),第一个参数为数据库文件,第二个为SQL语句,第三个为-1,第四个为SQL语句中的占位符,此函数编译成功会返回SQLITE_OK.
       if(sqlite3_prepare_v2(db, [qSQLUTF8String], -1, &statement,NULL) ==SQLITE_OK) {
           //绑定参数开始
通过sqlite3_bind_text()函数给占位符绑定参数,第一个参数为绑定参数的对象,第二个表示是第几个占位符,第三个参数为占位符字符。
           sqlite3_bind_text(statement,1, [nameUTF8String], -1,NULL);
调用sqlite3_step一次或多次来执行这个sql,这个过程用于执行有前面sqlite3_prepare创建的准备语句。这个语句执行到结果的第一行可用的位置。继续前进到结果的第二行的话,只需再次调用sqlite3_setp()。继续调用sqlite3_setp()知道这个语句完成,那些不返回结果的语句(如:INSERTUPDATE,或DELETE),sqlite3_step()只执行一次就返回。
           if(sqlite3_step(statement)==SQLITE_ROW) {
调用sqlite3_column_text(statement,0)函数返回第0列的值
               char* name = (char*)sqlite3_column_text(statement,0);
               
NSString*nsname = [[NSStringalloc]initWithUTF8String:name];
               
intage = (int)sqlite3_column_int(statement,1);
               
char* sex = (char*)sqlite3_column_text(statement,2);
               
NSString*nssex = [[NSStringalloc]initWithUTF8String:sex];
               
Note*note = [[Notealloc]init];
                note.
name= nsname;
                note.
age= age;
                note.sex = nssex;
调用sqlite3_finalize(statement)函数释放资源
               sqlite3_finalize(statement);
关闭数据库
               sqlite3_close(db);
               
returnnote;
            }
        }
       
sqlite3_finalize(statement);
       sqlite3_close(db);
(3)插入数据
- (int)create:(Note*)model{
   
NSString*pathString = [NSHomeDirectory()stringByAppendingString:@"/Documents/Note.sqlite"];
   
NSLog(@"%@",pathString);
   
if (sqlite3_open([pathStringUTF8String], &db)!=SQLITE_OK) {
       
NSLog(@"打开数据库失败!");
       
sqlite3_close(db);
    }else{
设置插入语句
       NSString*sql = @"INSERT OR REPLACE INTO USER (name,age,sex) VALUES (?,?,?)";
       
sqlite3_stmt*statement;
       
if (sqlite3_prepare_v2(db, [sqlUTF8String], -1, &statement,NULL) ==SQLITE_OK) {
           
sqlite3_bind_text(statement,1, [model.nameUTF8String], -1,NULL);
           
sqlite3_bind_int64(statement,2, model.age);
           sqlite3_bind_text(statement,3, [model.sexUTF8String], -1,NULL);
执行插入语句
           if(sqlite3_step(statement)!=SQLITE_DONE){
               
NSLog(@"插入数据失败!");
            }
        }
       
sqlite3_finalize(statement);
       
sqlite3_close(db);
    }
   
return 0;
}
(4)修改数据操作跟插入一样只是sql语句变了一下。
0 0