`
xyz_lmn
  • 浏览: 64414 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

iOS学习笔记(十五)——数据库操作(SQLite)

    博客分类:
  • ios
 
阅读更多

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

 

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

创建并打开数据库:

 

-(BOOL) openDB{
   //获取数据库路径
    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来查询表。下面给给出了sqlite3_exec的封装:

 

-(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);
    }    
}

 

 

创建表:

 

-(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);
}


好了,这就是全部了,iOS中数据库操作的类封装的并不太好用,希望大家尽量封装自己的类,。

 

 

Demo下载

 

 

/**
* @author 张兴业
* iOS入门群:83702688
* android开发进阶群:241395671
* 我的新浪微博:@张兴业TBOW
*/
 
分享到:
评论

相关推荐

    iOS学习笔记(十六)——详解数据库操作(使用FMDB)

    在iOS开发中,数据库操作是不可或缺的一部分,而SQLite作为轻量级的关系型数据库,常常被用来存储应用的数据。然而,SQLite的原生API对于开发者来说并不友好,这催生了FMDB这样的第三方库。FMDB是Objective-C对...

    IOS应用源码——Notebook(记事本).zip

    在Notebook应用中,笔记数据的保存通常有几种常见方式:使用UserDefaults进行轻量级存储,SQLite数据库进行结构化数据管理,或者采用CoreData这一苹果推荐的持久化框架。由于是记事本应用,我们预期会使用CoreData来...

    Qt学习全程笔记—版权所有

    这份学习笔记包含了PPT、DOC和DOCX三种格式,适合不同的阅读习惯。QT.doc和QT.docx是笔记文本,详细记录了每个主题的学习要点和实践心得,而QT.ppt则包含了讲课的幻灯片,图文并茂地展示了关键概念和技术。 通过这...

    iosNotesExport:可用于将笔记从iOS备份导出到CSV的简单工具。-开源

    首先,它需要识别备份中的SQLite数据库文件,这是iOS系统用于存储笔记的主要方式。接着,它读取数据库,解析出每个笔记的标题、内容、创建日期、修改日期等信息。然后,利用CSV的规则,将这些信息转换为一行行的标准...

    QT.rar_QT学习资料

    7. **QT数据库模块**:QT提供了与多种数据库(如SQLite、MySQL、PostgreSQL)交互的接口,如QSqlDatabase、QSqlQuery等,方便开发者进行数据操作。 8. **网络编程**:QT的QNetworkAccessManager和QNetworkReply类可...

    QT教程文档--传智播客

    在数据存储方面,Qt提供了对多种数据库系统的支持,包括SQLite、MySQL、PostgreSQL等,通过QSqlDatabase类可以方便地进行数据库操作。 除了基本的GUI和网络功能,Qt还涵盖了多媒体处理、XML解析、OpenGL集成、并发...

    qt-study.zip_QT

    QT学习笔记中的“qt笔记.doc”可能包含了以下关键知识点: 1. **QT安装与环境配置**:首先,学习QT需要了解如何在不同平台上安装QT开发工具,例如QT Creator,以及如何配置编译器和构建系统,如MinGW或MSVC。 2. *...

    iphone学习的demo

    6. **数据存储**:简单应用可能涉及基本的数据存储,如UserDefaults或SQLite数据库,了解如何存储和检索用户数据。 7. **网络请求**:如果Demo涉及到网络通信,你可能需要学习如何使用URLSession进行HTTP请求,获取...

    易信 QQ 微信 陌陌 表情 Android版

    标题中的“易信 QQ 微信 陌陌 表情 ...综上所述,这个压缩包内容涉及Android应用开发、数据库操作、UI设计、资源管理等多个方面,对于希望在Android应用中集成表情功能的开发者来说,提供了宝贵的学习和参考素材。

    Flutter_Notebook:Flutter制作的一款简单但实用的笔记本

    6. **数据库集成**:为了存储和检索用户的笔记,Flutter Notebook可能使用SQLite或其它本地数据库解决方案。这些数据库允许在无网络连接的情况下也能访问数据,提高用户体验。 7. **数据持久化**:Flutter提供多种...

    Beginning PhoneGap

    - **数据库操作**:讨论如何使用SQLite等数据库进行复杂的数据管理。 #### 十一、联系人与数据捕获 随后的章节继续深入技术细节: - **第十三章“Contacts”**:讲述了如何访问和管理设备上的联系人信息。 - **第...

    iNote

    《深入探索Swift编程语言——以iNote项目为例》 Swift,由Apple开发并维护,是一种强大的、现代化的编程语言,专为iOS、iPadOS、macOS、watchOS和tvOS等Apple平台设计。其语法简洁易懂,同时拥有丰富的功能,使得...

    notes-swift

    【笔记应用——Swift快速开发详解】 Swift是一种由Apple公司开发并开源的编程语言,主要用于构建iOS、iPadOS、macOS、watchOS以及tvOS的应用程序。"notes-swift"项目显然是一个使用Swift编写的笔记应用示例,旨在...

Global site tag (gtag.js) - Google Analytics