Sqlite(数据库)

       1.Sqlite数据类型:NULL. 空值、INTEGER. 整型、REAL.浮点型、TEXT.文本类型、BLOB. 二进制类型,用来存储文件,比如图片


      2.使用sqlite3需要先导入libsqlite3.dylib并导入主头文件


      3. 设置数据库文件存放路径,如沙盒的Doucuments文件夹内

      NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

      _dbPath = [path stringByAppendingPathComponent:@"person.sqlite"];
      4.打开数据库文件:
      sqlite3_open([_dbPath UTF8String], &_db);//第一个参数代表数据库文件的路径,第二个是sqlite对象,注意,此方法返回值为0时,代表打开成功
      5.创建数据库表
       const char *createSQL = "CREATE TABLE IF NOT EXISTS PEOPLE (ID INTEGER PRIMARY KEY AUTOINCREMENT, name Text, pwd TEXT)";//创建表的sql语句
sqlite3_exec(_db, createSQL, NULL, NULL, NULL);//执行建表语句
      6.插入数据
NSString *sql = [NSString stringWithFormat:@"INSERT OR REPLACE INTO PEOPLE (name,pwd) VALUES('aa','bb')"];//sql语句
sqlite3_exec(_db, [sql UTF8String], NULL, NULL, NULL);//执行操作,注意,sqlite是基于c语音的,所以sql语句需要是C语言中的字符串,如果不是,则需要自己转换
      7.删除操作:
NSString *sql = [NSString stringWithFormat:@"delete from PEOPLE where id=%d",1];//sql语句
sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL);
     8.更新数据:
NSString *sql = [NSString stringWithFormat:@"update PEOPLE set name = '%@' where id=2",@"小黄"];//sql语句
sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL);//执行sql语句
    9.查询数据库
NSString *sql = @"SELECT * FROM PEOPLE";//sql语句
sqlite3_prepare_v2检查sql的合法性
sqlite3_step逐行获取查询结果
sqlite3_coloum_xxx获取对应类型的内容
sqlite3_stmt *stmt = NULL;//用于保存编译好的sql语句
//判断查询语句是否合法
if (SQLITE_OK == sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, NULL)) {
while (SQLITE_ROW == sqlite3_step(stmt)) {
//获取数据,第一个参数为执行语句,第二个参数代表每一行的第几列
const unsigned char *name = sqlite3_column_text(stmt, 1);
//转换成OC字符串
NSString *str = [NSString stringWithUTF8String:(const char *)name];
}
}
     10.sqlite3_close(_db);//关闭数据库

下面是一个小小的例子:(借用火狐浏览器)

1.点击头文件。如图-1所示:

 

 

 

 

图-1

2.找到Linked Framewks and Libraries,点击"+"号,出现如图-3所示:

 

图-2

3.出现图-3,在search中查找sqlite.3

图-3

#import "ViewController.h"
#import  <sqlite3.h>//导入数据库的头文件
@interface ViewController ()
{
    sqlite3 *_db;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //一般会把数据库文件放入沙盒,所以需要先设定存放路径
    NSString *_dbpath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/MySql.sqlite"];
    
    //sqlite3_open方法,打开数据库文件,第一个参数代表数据库文件的路径,注意需要调用UTF8String方法将NSString转换成C的字符串格式,第二个参数代表数据库对象,该方法如果返回0(SQLITE_OK),代表数据库打开成功,如果该路径没有数据库文件,则先创建再打开,否则直接打开
    int a = sqlite3_open([_dbpath UTF8String], &_db);
    NSLog(@"%d",a);
     //创建数据库表
    //数据库表创建语句:create table if not exist(如果表不存在) Student(表名,自己定义)(该括号要保存的信息:字段名 字段格式 ,多个字段之间用逗号隔开)
    NSString *s=@"create table if not exists Student(name TEXT,age INTEGER)";//如果数据库中没有Student表,则创建该表,包含字符串形式的name和整形的age
    //执行数据库语句:第一个参数代表执行的数据库对象,也就是打开的数据库,第二个参数代表执行语句,后面三个直接给NULL即可
    sqlite3_exec(_db,[s UTF8String], NULL, NULL, NULL);
    //数据库增加数据
    //sql插入语句:insert into Student(表名) (要进行保存的字段名,名字之间用逗号隔开) values(要保存的实际数据,多个数据用逗号隔开,注意:此处数据要与前面的字段名保持一致,且如果是TEXT类型,需要用单引号引起来)
    NSString *insertSql=@"insert into Student(name,age) values('江帅',21)";
    //执行插入语句
    sqlite3_exec(_db,[insertSql  UTF8String], NULL, NULL, NULL);
    NSString *insertSql1=@"insert into Student(name,age) values('刘春雷',22)";
    //执行插入语句
    sqlite3_exec(_db,[insertSql1  UTF8String], NULL, NULL, NULL);
    NSString *insertSql2=@"insert into Student(name,age) values('丁云翔',25) ";
    //执行插入语句
    sqlite3_exec(_db,[insertSql2  UTF8String], NULL, NULL, NULL);
    //删除操作
    //sql删除语句:delete(关键字) from Student(表名)where(条件关键字)name(字段名)=''(要删除数据的条件,如果是TEXT,用单引号引起来)
    NSString *deSql=@"delete from Student where name= '丁云翔'";
    sqlite3_exec(_db, [deSql UTF8String], NULL, NULL, NULL);
    //全部删除
    // NSString *delAll=@"delete from Student";
    //sqlite3_exec(_db, [delAll UTF8String], NULL, NULL, NULL);
    //该(更新)
    //sql更新语句:update(关键字)Student(表名)set(关键字 赋值)age(字段名)=25(要更改的值,如果要更改多个字段,则用逗号隔开)where(条件关键字)rowid(字段名)= 6(条件)
    NSString *updateSql=@"update Student set age = 25,name = '刘春雷' where rowid =  6";
    sqlite3_exec(_db, [updateSql UTF8String], NULL, NULL, NULL);
    //查询
    //查询语句
    //查询所有:select(关键字)*from Student(表名)
    NSString *querySql=@"select * from Student";
    sqlite3_stmt *_stmt=nil;//用于存放查询结果
    int res1=sqlite3_prepare(_db, [querySql UTF8String], -1, &_stmt, NULL);//检查sql语句的合法性,如果合法则直接运行,返回结果为0
    if (res1==0) {
        //便利结果集_stmt如果sqlite3_step返回100,代表有查询结果,先取出第一条,然后再指向下一条,直到sqlite3_step返回101,代表遍历结束
        while (SQLITE_ROW ==sqlite3_step(_stmt)) {
            //取出单行结果中的某一列,从0开始
            const unsigned char *s = sqlite3_column_text(_stmt, 0);
            
            //将查询结果转换成oc字符串
            NSString *name = [NSString stringWithUTF8String:(const char *)s];
            
            NSLog(@"结果:%@",name);
        }
    }
    //查询符合条件的结果
    
    NSString *querySql1 = @"select * from Student where age < 23";
    
    sqlite3_stmt *_stmt1 = nil;//用于存放查询结果
    
    int res2 = sqlite3_prepare(_db, [querySql1 UTF8String], -1, &_stmt1, NULL);//检查sql语句的合法性,如果合法则直接运行,返回结果为0
    if (res2 == 0) {
        //遍历结果集_stmt,如果sqlite3_step返回100,代表有查询结果,先取出第一条,然后再指向下一条,直到sqlite3_step返回101,代表遍历结束
        while (SQLITE_ROW == sqlite3_step(_stmt1)) {
            //取出单行结果中的某一列,从0开始
            const unsigned char *s = sqlite3_column_text(_stmt1, 0);
            
            //将查询结果转换成oc字符串
            NSString *name = [NSString stringWithUTF8String:(const char *)s];
            
            NSLog(@"--结果:%@",name);
        }
    }
    sqlite3_close(_db);//关闭数据库
    NSLog(@"%@",_dbpath);
    
    
}
原文地址:https://www.cnblogs.com/wyhwyh2114/p/5005596.html