zoukankan      html  css  js  c++  java
  • 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);
        
        
    }
  • 相关阅读:
    C#通过反射获取类中的方法和参数个数,反射调用方法带参数
    C#利用WinRAR实现压缩和解压缩
    C# 使用HttpWebRequest Post提交数据,携带Cookie和相关参数示例
    C#使用Linq To XML读取XML,Linq生成XML,Linq创建带属性或带节点XML
    MVC使用Newtonsoft无需实体类,实现JSON数据返回给前端页面使用
    JSON对象与字符串之间的相互转换
    Javascript正则表达式详细讲解和示例,通俗易懂
    C#比较两个list集合,两集合同时存在或A集合存在B集合中无
    Uploadify 3.2上传文件,限制类型,大小,传递参数等
    c# 反射得到实体类的字段名称和值,DataTable转List<T>
  • 原文地址:https://www.cnblogs.com/wyhwyh2114/p/5005596.html
Copyright © 2011-2022 走看看