Sqlite(数据库)

摘要:
无效的。空值,整数。整数,REAL。浮点,文本。文本类型,BLOB。二进制类型,//执行sql语句9。查询数据库NSString*sql=@“SELECT*FROMPEOPLE”;

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

免责声明:文章转载自《Sqlite(数据库)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server對象的最大容量限制spring security 在controller层 方法级别使用注解 @PreAuthorize("hasRole('ROLE_xxx')")设置权限拦截 ,无权限则返回403下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Sqlserver作业-手把手带你体验

所谓Sql Server作业就是按照规定的时间执行指定的脚本,如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,可以用管理-SQL Server代理-作业来实现. (1)打开Sqlserver,可以再sqlserver代理中看到作业这一项 (2)我们新建一个作业,我用的是自己测试数据库是一个算收益的作...

C#_MySql 主从复制

一、业务发展驱动数据发展   随着网站业务的不断发展,用户量的不断增加,数据量成倍地增长,数据库的访问量也呈线性地增长。特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案不够健壮,那么数据库服务器很有可能在高并发访问负载压力下宕机,造成数据访问服务的失效,从而导致网站的业务中断,给公司和用户造成双重损失。那么,有木有一种方...

七周七数据库

北京--西三旗,雨天。。。在周末休息之余也不要忘记学习呀,嘻嘻~ 冲冲冲 --关系数据库-- 关系数据库管理系统是以集合理论为基础的系统,,实现为具有行和列的二维表。与RDBMS交互的标准方法,是用结构化查询语句编写查询,数据值具有类型,可以是数字、字符串/日期/未解释的二进制大对象,或其他类型。系统强制使用类型。重要的是,表可以联接并转化为新的、更复杂的...

Postgresql的日志配置

背景   公司的项目中使用了postgresql(简称pg)作为其数据库管理系统,前两天环境突然崩溃了,页面无法打开。经过排查,我发现是数据库所在机器磁盘满了,通过目录和文件排序,原来是pg的日志太多(大约保留了大半年的日志在磁盘上没有被清理)。   我看了下pg的日志配置,发现基本都是用的默认配置,日志滚动没有开启,于是乎做了下相关配置优化后对pg进行重...

解决delphi使用sqlite时中文最后一个字是乱码的问题

           给部门同事写了个自动生成测试用例执行情况图表的工具,使用的sqlite3,遇到中文分别使用UTF8Encode和UTF8Decode进行处理,可还是出现了某些字段从数据库中读出时,最后一个汉字是乱码的情况。   自己看了一下SQLiteTable3.pas的代码,发现从数据库中读出utf8字符时用setstring进行了强制转换,造成...

Python实现mysql数据库增删改查

利用python操作mysql数据库用法简单,环境配置容易,本文将实现对库增、删、改、查的简易封装! 1. 环境配置 安装第三方包,导入模块mysql.connector pip install mysql-connector 2.使用说明 本文将提供add,delete,update,query以及connect五种方法,下边将详述使用参数: 方法名...