首页 > 代码库 > 数据库操作(SQLite)

数据库操作(SQLite)

SQLite 是一个轻量级的关系数据库。SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的内存就够了,目前应用于Android、iOS、Windows Phone等智能手机。iOS 使用时SQLite,只需要加入 libsqlite3.dylib 依赖以及引入 sqlite3.h 头文件即可。

数据库操作包含打开数据库、创建表,表的增、删、改、查。下面代码给出了数据库操作.

创建并打开数据库:

//获取数据库路径      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);      NSString *documents = [paths objectAtIndex:0];      NSString *database_path = [documents stringByAppendingPathComponent:DBNAME];            //如果数据库存在,则用sqlite3_open直接打开(不要担心,如果数据库不存在sqlite3_open会自动创建)      //打开数据库,这里的[path UTF8String]是将NSString转换为C字符串,因为SQLite3是采用可移植的C(而不是      //Objective-C)编写的,它不知道什么是NSString.      if (sqlite3_open([database_path UTF8String], &db) == SQLITE_OK) {          return YES;      }else{          return NO;          NSLog(@"数据库打开失败");          sqlite3_close(db);      }  

 iOS中没有提供创建数据库的命令,当使用sqlite3_open时,如果数据库文件不存在会自行创建数据库,如果存在会打开数据库。打开数据库后就可以创建表并操作表内容了,iOS中的sqlite3使用sqlite3_exec来创建表、插入表内容、修改表内容、删除表内容等操作,使用sqlite3_prepare_v2来查询表。

-(void)execSql:(NSString *)sql  {          if ([self openDB]) {          char *err;          if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {              NSLog(@"数据库操作数据失败!");          }else{              NSLog(@"%@",sql);          }          sqlite3_close(db);      }      }  

  创建表:

NSString *sqlCreateTable =  [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS ‘%@‘ (‘%@‘ INTEGER PRIMARY KEY AUTOINCREMENT, ‘%@‘ TEXT, ‘%@‘ INTEGER, ‘%@‘ TEXT)",TABLENAME,ID,NAME,AGE,ADDRESS];      [self execSql:sqlCreateTable];  

 插入数据:

-(void) insertData{      NSString *insertSql1= [NSString stringWithFormat:                        @"INSERT INTO ‘%@‘ (‘%@‘, ‘%@‘, ‘%@‘) VALUES (‘%@‘, ‘%@‘, ‘%@‘)",                        TABLENAME, NAME, AGE, ADDRESS, @"张三", @"13", @"济南"];      [self execSql:insertSql1];            NSString *insertSql2 = [NSString stringWithFormat:                        @"INSERT INTO ‘%@‘ (‘%@‘, ‘%@‘, ‘%@‘) VALUES (‘%@‘, ‘%@‘, ‘%@‘)",                        TABLENAME, NAME, AGE, ADDRESS, @"李四", @"12", @"济南"];      [self execSql:insertSql2];        }  
// 更新数据

-(void) updateData{ NSString *updateSql = [NSString stringWithFormat: @"UPDATE ‘%@‘ SET ‘%@‘ = ‘%@‘ WHERE ‘%@‘ = ‘%@‘", TABLENAME, AGE, @"15" ,AGE, @"13"]; [self execSql:updateSql]; }

 删除表内容:

-(void) deleteData{      NSString *sdeleteSql = [NSString stringWithFormat:                        @"delete from %@ where %@ = ‘%@‘",                        TABLENAME, NAME, @"张三"];      [self execSql:sdeleteSql];  }  

查询:

-(void) selectData{        [self openDB];      NSString *sqlQuery = [NSString stringWithFormat:                        @"SELECT * FROM %@",TABLENAME];      sqlite3_stmt * statement;            if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {                    //查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值,注意这里的列值            while (sqlite3_step(statement) == SQLITE_ROW) {              char *name = (char*)sqlite3_column_text(statement, 1);              NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];                            int age = sqlite3_column_int(statement, 2);                            char *address = (char*)sqlite3_column_text(statement, 3);              NSString *nsAddressStr = [[NSString alloc]initWithUTF8String:address];                            NSLog(@"name:%@  age:%d  address:%@",nsNameStr,age, nsAddressStr);          }      }else{          NSLog(@"select error:%@",sqlQuery);        }      sqlite3_close(db);  }