iOS sqlite数据库使用

  关于sqlite是一个轻量的、跨平台的、开源的数据库引擎。他在读写效率,操作便捷程度,内存消耗上具有很大的优越性,所以很受移动开发者的喜爱。当然,sqlite 也因其力求简单高效,也就限制了它对并发,海量数据的处理。这篇博客主要讲的是iOS开发中sqlite和开源库FMDB的使用。

  demo 地址 TP

  •   常使用的方法介绍
  1.   首先打开数据库
int result = sqlite3_open_v2(fileName.UTF8String, &db, SQLITE_IOERR_READ|SQLITE_IOERR_WRITE|SQLITE_OPEN_CREATE, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"open true");
    }

  2.  创建表

//创建表
    const char *sqlCreate = "CREATE TABLE IF NOT EXISTS t_demo (id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);";

    char *errmsg = NULL;
    result = sqlite3_exec(db, sqlCreate, NULL, NULL, &errmsg);
    if (result == SQLITE_OK) {
        NSLog(@"create true");
    }

  3.  执行sql语句

//执行sql语句

    //1.插入
    NSString *sqlInsert = [NSString stringWithFormat:@"INSERT INTO t_demo (name,age) VALUES(‘%@‘,‘%d‘);",@"one",19];
    sqlite3_exec(db, sqlInsert.UTF8String, NULL, NULL, &errmsg);
    sqlite3_exec(db, sqlInsert.UTF8String, NULL, NULL, &errmsg);
    sqlite3_exec(db, sqlInsert.UTF8String, NULL, NULL, &errmsg);
    if (errmsg) {
        NSLog(@"insert false");
    }

    // 2.查询
    NSString *sqlQuery = [NSString stringWithFormat:@"SELECT id,name,age FROM t_demo;"];
    sqlite3_stmt *stmt = NULL;
    //准备执行语句
    if (sqlite3_prepare_v2(db, sqlQuery.UTF8String, -1, &stmt, NULL) == SQLITE_OK) {
        //分步执行
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            int ID = sqlite3_column_int(stmt, 0);
            const unsigned char *name  = sqlite3_column_text(stmt, 1);
            int age = sqlite3_column_int(stmt, 2);

            NSLog(@"%d***%s******%d",ID,name,age);
        }
    }
    //释放
    sqlite3_free(stmt);
  • 常使用的方法介绍
  1. 打开数据库
sqlite3_open_v2(
                    const char *filename,   /* 数据库名字 */
                    sqlite3 **ppDb,         /* 数据库实例 */
                    int flags,              /* Flags */
                    const char *zVfs        /* Name of VFS module to use */
                    );

  2.执行sql语句

sqlite3_exec(
                 sqlite3*,                                  /* 数据库实例*/
                 const char *sql,                           /* sql语句 */
                 int (*callback)(void*,int,char**,char**),  /* Callback function */
                 void *,                                    /* 1st argument to callback */
                 char **errmsg                              /* Error msg written here */
                 );

  3.检查sql语句语法

sqlite3_prepare_v2(
                       sqlite3 *db,            /* 数据库实例 */
                       const char *zSql,       /* sql语句 */
                       int nByte,              /* Maximum length of zSql in bytes. */
                       sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
                       const char **pzTail     /* OUT: Pointer to unused portion of zSql */
                       );

  4.查询一行数据,如果查询到一行数据,就会返回SQLITE_ROW

    sqlite3_step(sqlite3_stmt*);

  5.利用stmt获得某一列的值

double sqlite3_column_double(sqlite3_stmt*, int iCol);  // 浮点数据
int sqlite3_column_int(sqlite3_stmt*, int iCol); // 整型数据
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); // 长整型数据
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); // 二进制文本数据
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);  // 字符串数据

FMDB 是对sqlite的封装。源码地址https://github.com/ccgus/fmdb,操作是oc方法,这对不熟悉或者不想操作c语言方法的同学来说是一个解脱。

首先导入sqlite系统库,引入头文件#import "FMDB.h"

NSString *docDic = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *fileName = [docDic stringByAppendingPathComponent:@"fmdb.db"];
    //创建数据库,路径为空的话,在内存中创建数据库
    fmdb = [FMDatabase databaseWithPath:fileName];

    [fmdb open];
    //执行sql语句,增、删、改都是executeUpdate方法
    NSString *sqlCreate =@"CREATE TABLE IF NOT EXISTS t_demo (id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);";
    BOOL res = [fmdb executeUpdate:sqlCreate];
    NSString *sqlInsert = [NSString stringWithFormat:@"INSERT INTO t_demo (name,age) VALUES(‘%@‘,‘%d‘);",@"one",19];
    res = [fmdb executeUpdate:sqlInsert];
    if (!res) {
        NSLog(@"error when creating db table");
    } else {
        NSLog(@"success to creating db table");
    }
    //执行查询
    NSString *sqlQuery = [NSString stringWithFormat:@"SELECT id,name,age FROM t_demo;"];

    FMResultSet * rs = [fmdb executeQuery:sqlQuery];
    while ([rs next]) {
        int Id = [rs intForColumn:@"id"];
        NSString * name = [rs stringForColumn:@"name"];
        NSString * age = [rs stringForColumn:@"age"];
        NSLog(@"id = %d, name = %@, age = %@ ", Id, name, age);
    }
时间: 2024-10-27 03:49:04

iOS sqlite数据库使用的相关文章

iOS sqlite数据库实现(转)

转载自:http://www.cnblogs.com/macroxu-1982/archive/2012/10/01/2709960.html 1 实现过程添加libsqlite3组件 选择项目后,在展示的xcodepro文件配置界面中配置 build phases -> Link Binary With Libraries -->+ -->libsqlite3.dylib 2 在当前项目中添加sqlite 数据库 3 实现app运行时,将sqlite文件复制到沙盒中 4 实现查询数据库

IOS SQLite数据库

简介 在IOS中使用Sqlite来处理数据.如果你已经了解了SQL,那你可以很容易的掌握SQLite数据库的操作. 实例步骤 1.创建一个简单的View based application 2.选择项目文件,然后选择目标,添加libsqlite3.dylib库到选择框架 3.通过选择" File-> New -> File... -> "选择 Objective C class 创建新文件,单击下一步 4."sub class of"为NSObje

iOS: Sqlite数据库的功能:建表,增加,删除,修改,查找

 本篇主要介绍Sqlite数据库的功能:建表,增加,删除,修改,查找. 采用封装的方法写的,继承于NSObject. 需向工程中添加libsqlite3.tbd库. #import "DataBaseHandle.h" //引入头文件 #import <sqlite3.h> @interface DataBaseHandle() //用来存放数据库的路径 @property (nonatomic,strong) NSString *filePath; @end @imple

IOS sqlite数据库增删改查

1.简单介绍 简单封装sqlite数据库操作类 BaseDB 用于完毕对sqlite的增删改查.使用前先导入libsqlite3.0.dylib库 2.BaseDB.h // // BaseDB.h // SqliteDemo // // Created by 赵超 on 14-8-26. // Copyright (c) 2014年 赵超. All rights reserved. // #import <Foundation/Foundation.h> #import "sqli

ios Sqlite数据库增删改查基本操作

研究了几天的数据库,终于把它给搞出来了.Sqlite是ios上最常用的数据库之一,大家还是有必要了解一下的.这是仿照网上的一个例子做的,有些部分写的不好,我稍作了修改,以讲解为主,主要让大家能够明白如何修改,明白原理,达到举一反三的目的. 先来看看效果图 先来看看数据库方法类,将各个操作都封装在一个类里面,达到代码重用的目的,这是程序员都应该努力去实现的目标,这样在下一次用到同样的方法和类的时候,就可以直接使用封装好的类,可以节约大量的时间. 先来看看.h文件 #import <Foundati

转:ios Sqlite数据库增删改查基本操作

研究了几天的数据库,终于把它给搞出来了.Sqlite是ios上最常用的数据库之一,大家还是有必要了解一下的.这是仿照网上的一个例子做的,有些部分写的不好,我稍作了修改,以讲解为主,主要让大家能够明白如何修改,明白原理,达到举一反三的目的. 先来看看效果图 先来看看数据库方法类,将各个操作都封装在一个类里面,达到代码重用的目的,这是程序员都应该努力去实现的目标,这样在下一次用到同样的方法和类的时候,就可以直接使用封装好的类,可以节约大量的时间. 先来看看.h文件 #import <Foundati

IOS SQLIte 数据库操作

NSString* docsDir = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory,NSUserDomainMask,YES) lastObject]; NSString* dbPath = [docsDir stringByAppendingPathComponent:@"people.db"]; FMDatebase* db = [FMDatebase databaseWithPath:dbPath]; FMR

IOS -- SQLite数据库判断表是否存在

/** 判断一张表是否已经存在 @param tablename 表名 */ - (BOOL)isExistTable:(NSString *)tablename{ if ([_dataBase open]) { FMResultSet *rs = [_dataBase executeQuery:@"select count(*) as 'count' from sqlite_master where type ='table' and name = ?", tablename]; w

iOS中 FMDB第三方SQLite数据库 UI_20

1.什么是FMDB? FMDB是iOS平台下SQLite数据库,只不过它是OC方式封装了C语言的SQLite语句,使用起来更加面向对象 2.FMDB的优点:1.使用起来更加面向对象; 2.对比苹果自带的 Core Data 数据管理工具更加的轻量级,更加的灵活,而且FMDB支持跨平台; 3.提供多线程下的数据安全保护机制,有效地防止数据混乱 3.FMDM中重要的类: FMDBDataBase: 它代表一个数据库对象,(我们需要创建数据库对象时就使用这个类) FMDBDataBaseQueue: