iOS开发之SQLite数据库

SQLite3在存储和检索大量数据方面非常有效,它能够对数据进行复杂的聚合,与使用对象进行这些操作相比,获得结果的速度更快。例如,我们要从数据集合中获取满足条件的数据的总和,通过SQLtie可以执行这些操作,并且不需要将这些数据加载到内存中,这使得数据检索的效率更高。操作SQLite数据库需要用SQL语句与之交互,可以点击这里来查询相应的SQL语句。

1、创建SQLiteTest,运用single view这个模板,并导入libsqlite3.dylib这个动态库。

2、在指定沙盒目录下创建或者打开数据库,用sqlite3_open这个方法来打开数据库,如果数据库不存在,会创建一个新的数据库。

<span style="font-size:14px;">/*数据库存储路径*/
- (NSString *)dataFilePath

{
    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * documentDirectory = paths[0];
    return [documentDirectory stringByAppendingPathComponent:@"studentsData.sqlite"];
}</span>

<span style="font-size:14px;">if (sqlite3_open([self dataFilePath].UTF8String, &database) != SQLITE_OK) {
        sqlite3_close(database);
    }
</span>



3、创建数据表,在这里创建一个管理学生的表,包括四个id,name,age和address四个字段,sqlite_exec用于执行无返回值的SQL语句。


<span style="font-size:14px;">- (BOOL)execSQL:(NSString *)sql
{
    char * err;
    /*sqlite_exec用于执行无返回值的SQL语句*/
    if (sqlite3_exec(database, sql.UTF8String, NULL, NULL, &err) != SQLITE_OK) {
        NSLog(@"数据库操作失败");
        return NO;
    }
    return YES;
}</span>

<span style="font-size:14px;">NSString * creatSQL = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (id INTEGER,name TEXT,age INTEGER,address TEXT)",TABLE_NAME];
    [self execSQL:creatSQL];</span>

用火狐浏览器的SQLite Manger插件可以查看创建的数据库和数据表。



4、向表中添加几条数据记录。


首先是用SQL语句的方式增加数据。

<span style="font-size:14px;">NSString * insertSQL1 = [NSString stringWithFormat:@"INSERT INTO '%@' ('%@','%@', '%@', '%@') VALUES ('%@','%@', '%@', '%@')",
                             TABLE_NAME,@"id",@"name", @"age", @"address",@"001", @"student1", @"23", @"北京市"];
    
    NSString * insertSQL2 = [NSString stringWithFormat:@"INSERT INTO '%@' ('%@','%@', '%@', '%@') VALUES ('%@','%@', '%@', '%@')",
                             TABLE_NAME,@"id",@"name", @"age", @"address",@"002", @"student2", @"30", @"上海市"];
    
    NSString * insertSQL3 = [NSString stringWithFormat:@"INSERT INTO '%@' ('%@','%@', '%@', '%@') VALUES ('%@','%@', '%@', '%@')",
                             TABLE_NAME,@"id",@"name", @"age", @"address",@"003", @"student3", @"28", @"广州市"];
    
    [self execSQL:insertSQL1];
    [self execSQL:insertSQL2];
    [self execSQL:insertSQL3];</span>


除了使用SQL语句添加数据之外,还有一种更好的方法,就是绑定变量。

<span style="font-size:14px;">NSString * insertSQL = [NSString stringWithFormat:@"INSERT OR REPLACE INTO %@ (%@, %@,%@,%@)"
                            "VALUES (?,?,?,?);",TABLE_NAME,@"id",@"name",@"age",@"address"];
    sqlite3_stmt * stmt;
    if (sqlite3_prepare_v2(database, insertSQL.UTF8String, -1, &stmt, nil) == SQLITE_OK) {
        sqlite3_bind_int(stmt, 1, 004);
        sqlite3_bind_text(stmt, 2, "student4", -1, NULL);
        sqlite3_bind_int(stmt, 3, 26);
        sqlite3_bind_text(stmt, 4, "深圳市",-1,NULL);
    }
    
    if (sqlite3_step(stmt) != SQLITE_OK) {
        NSLog(@"bind error");
    }</span>



5、删除数据,例如删除address为广州市的学生信息。

<span style="font-size:14px;">NSString * deleteSQL = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@ = '广州市' ",TABLE_NAME,@"address"];
    [self execSQL:deleteSQL];</span>


6、修改数据,例如将name为student4的学生的address改为青岛市。


<span style="font-size:14px;">NSString * updataSQL = [NSString stringWithFormat:@"UPDATE %@ SET ADDRESS = '青岛市' WHERE NAME = 'student4' ",TABLE_NAME];
    [self execSQL:updataSQL];</span>


7,数据查询,例如,查询所有年龄小于28岁的学生信息。

NSString * selectSQL = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE AGE < 28",TABLE_NAME];
    sqlite3_stmt * stmt;
    if (sqlite3_prepare_v2(database, selectSQL.UTF8String, -1, &stmt, nil) == SQLITE_OK) {
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            int student_id = sqlite3_column_int(stmt, 0);
            char * name = (char *)sqlite3_column_text(stmt, 1);
            int age = sqlite3_column_int(stmt, 2);
            char * address = (char *)sqlite3_column_text(stmt, 3);
            
            NSLog(@" id = %d,name = %@, age = %d,address = %@",student_id,[NSString stringWithUTF8String:name],age,[NSString stringWithUTF8String:address]);
        }
    }



每次操作完数据库之后,不要忘了关闭数据库,调用sqlite3_close。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值