zoukankan      html  css  js  c++  java
  • Sqlite

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

    2、使用sqlite3 首先要导入libsqlite3.dylib,并导入头文件Sqlite3.h。定义  sqlite3 *_db;

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

        NSString *_dbpath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/mySql.sqlite"];

        NSLog(@"%@",_dbpath);

    4、打开数据表   sqlite3_open方法

        打开数据库文件,第一个参数代表数据库文件的路径,注意需要调用UTF8String方法将NSString转换成C的字符串格式,第二个参数代表数据库对象,该方法如果返回0(SQLITE_OK),代表数据库代开成功,如果该路径没有数据库文件,则先创建再打开,否则直接打开

         int r = sqlite3_open([_dbpath UTF8String], &_db);

    5、创建数据表   create table if not exists(如果表不存在) Student(表名,自己定义) (该括好放要保存的信息:字段名 字段格式,多个字段之间用逗号隔开)

        NSString *path = @"create table if not exists Student(name TEXT,age INTEGER)";//如果数据库中没有Student表,则创建该表,包含 字符串形式的name和整型的age

    6、执行数据库语句  

    //执行数据库语句: 第一个参数代表执行的数据库对象,也就是打开的数据库,第二个参数代表执行语句,后面三个直接给NULL即可

        sqlite3_exec(_db, [path UTF8String], NULL, NULL, NULL);

    7、增加(插入)

         //sql插入语句:insert into Student(表名) (要进行保存的字段名,名字之间用逗号隔开) values(要保存的实际数据,多个数据用逗号隔开,注意:此处数据要与前面的字段名保持一致,且如果是TEXT类型,需要用单引号引起来)

        NSString *s = @"insert into Student(name,age) values('小明',19)";

        sqlite3_exec(_db, [s UTF8String], NULL, NULL, NULL);

        NSString *s1 = @"insert into Student(name,age) values('小红',21)";

        sqlite3_exec(_db, [s1 UTF8String], NULL, NULL, NULL);

    8、删除

          //sql删除语句: delete(关键字) from Student(表名) where(条件关键字) name(字段名) = ‘小明’(要删除数据的条件,如果是TEXT,用单引号引起来)

        NSString *desqlite = @"delete from Student where name = '小明'";

        sqlite3_exec(_db, [desqlite UTF8String], NULL, NULL, NULL);

        //删除全部

        NSString *alldel = @"delete from Student";

        sqlite3_exec(_db, [alldel UTF8String], NULL, NULL, NULL);

    9、更新(改)

           //sql更新语句:update(关键字) Student(表名) set(关键字,赋值) age(字段名) = 25(要更改的值,如果要更新多个字段,则用逗号隔开) where(条件关键字) rowid(字段名) = 5(条件得看表中具体是那一行)

        NSString *upsql = @"update Studnet set age = 19,name = '小李' where rowid = 5";

        sqlite3_exec(_db, [upsql UTF8String], NULL, NULL, NULL);

    10、查询语句

         //查询所有:select(关键字) * from Student(表名)

        NSString *querysql = @"select *from Studnet";

        sqlite3_stmt *_stmt = nil;//用于存放查询结果

        int res = sqlite3_prepare(_db, [querysql UTF8String], -1, &_stmt, NULL);//检查sql语句的合法性,如果合法则直接运行,返回结果为0

        if (res == 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);           

            }

        }

     11、条件查询

        NSString *querysql1 = @"select *from Student where age<20";

        sqlite3_stmt *_stmt1 = nil;//用于存放查询结果

        int res1 = sqlite3_prepare(_db, [querysql1 UTF8String], -1, &_stmt1, NULL);//检查sql语句的合法性,如果合法则直接运行,返回结果为0

        if (res1 == 0) {

            //遍历结果集_stmt,如果sqlite3_step返回100,代表有查询结果,先取出第一条,然后再指向下一条,直到sqlite3_step返回101,代表遍历结束

            while (SQLITE_ROW == sqlite3_step(_stmt1)) {

                //取出单行结果中的某一列,从0开始

                const unsigned char *s1 = sqlite3_column_text(_stmt1, 0);

                //将查询结果转换成oc字符串

                NSString *name1 = [NSString stringWithUTF8String:(const char*)s1];

                NSLog(@"%@",name1);

            }

        }

     12、关闭数据库

             sqlite3_close(_db);// 关闭数据库

  • 相关阅读:
    Mybatis-plus学习笔记(一)
    Mysql基础(四)分组查询及连接查询
    Mysql 基础(三)排序查询及常用函数
    CyclicBarrier 使用详解
    countDownLatch
    pom所有依赖version红色但是不影响运行
    iText5实现Java生成PDF文件完整版
    【Maven】---Nexus私服配置Setting和Pom
    引用、指针、const、define、static、sizeof、左值右值
    事物隔离级别、MVCC以及数据库中常见锁介绍
  • 原文地址:https://www.cnblogs.com/wxzboke/p/5007701.html
Copyright © 2011-2022 走看看