一,创建工程

二: 导入头文件

三:导入

四: 数据库增删改查

//因为是结构体类型,所以用assign

//1.创建数据库(保存路径)

@property(nonatomic,assign)sqlite3 *db;

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

//结构体类型的指针

//    sqlite3 *db = NULL;

//打开数据库,如果没有就创建

NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"dasta.sqlite"];

NSLog(@"%@",path);

int success = sqlite3_open(path.UTF8String, &_db);

if(success == SQLITE_OK){

NSLog(@"创建数据库成功!");

//2.创建表(指定字段,需求,保存学生信息 id name score)

//用sql语句

NSString *str = @"CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT ,name TEXT NOT NULL,score REAL NOT NULL)";

//执行

int success_t =  sqlite3_exec(_db, str.UTF8String, NULL, NULL, NULL);

if(success_t == SQLITE_OK){

NSLog(@"创建表成功!");

}else{

NSLog(@"创建表失败!");

}

}else{

NSLog(@"创建数据库失败!");

}

//关闭数据库,至于在什么时候关闭,取决于自己的需求

sqlite3_close(_db);

}

//3.增加 (100条数据  数据随机)

- (IBAction)insertData:(UIButton *)sender {

for(int i = 0; i < 100 ; i++){

NSString *strName = [NSString stringWithFormat:@"ming-yuexing-%d",i];

NSString *sqlStr = [NSString stringWithFormat:@"INSERT INTO t_student (name , score) VALUES ('%@',%.2f)",strName,arc4random_uniform(1000)/10.0];

//执行

int success = sqlite3_exec(_db, sqlStr.UTF8String, NULL, NULL, NULL);

if(success == SQLITE_OK){

NSLog(@"添加成功");

}else{

NSLog(@"添加失败");

}

}

}

//4.删除 (70-80分数)

- (IBAction)deleteData:(UIButton *)sender {

NSString *sqlStr = @"DELETE FROM t_student WHERE score > 70.0 AND score < 80.0";

//执行

int success = sqlite3_exec(_db, sqlStr.UTF8String, NULL, NULL, NULL);

if(success == SQLITE_OK){

NSLog(@"删除成功");

}else{

NSLog(@"删除失败");

}

}

//5.修改 (修改小于60.0的 为60.0)

- (IBAction)updateData:(UIButton *)sender {

NSString *sqlStr = @"UPDATE t_student SET score = 60.0 WHERE score < 60.0";

//执行

int success = sqlite3_exec(_db, sqlStr.UTF8String, NULL, NULL, NULL);

if(success == SQLITE_OK){

NSLog(@"修改成功");

}else{

NSLog(@"修改失败");

}

}

//6.查询

- (IBAction)selectData:(UIButton *)sender {

//    (查成绩  >= 60)

//    NSString *sqlStr = @"SELECT * FROM t_student WHERE score > 60.0 ORDER BY score DESC";

//查询数据 (name中带 8 的)

//8% 意思是以8开头

//%8 意思是以8结尾

NSString *sqlStr = @"SELECT * FROM t_student WHERE name LIKE '%8'";

//查询之后,把结果放在stmt对象

//保存所有的结果集

sqlite3_stmt *stmt = nil;

sqlite3_prepare(_db, sqlStr.UTF8String, -1, &stmt, NULL);

//获取到所有的结果 每一步 查询到一条记录

sqlite3_step(stmt);

while (sqlite3_step(stmt) == SQLITE_ROW) {

//取出一条记录

//name TEXT score REAL

//从第几列告诉我

const unsigned char * name = sqlite3_column_text(stmt, 1);

NSString *strName = [NSString stringWithCString:(const char *)name encoding:NSUTF8StringEncoding];

//score

double score = sqlite3_column_double(stmt, 2);

NSLog(@"name = %@ score = %f",strName,score);

}

}

@end

李洪强iOS开发之-sql数据库的使用的更多相关文章

  1. 李洪强iOS开发之-环信04_消息

    李洪强iOS开发之-环信04_消息 消息:IM 交互实体,在 SDK 中对应的类型是 EMMessage.EMMessage 由 EMMessageBody 组成. 构造消息   构造文字消息 EMT ...

  2. 李洪强iOS开发之-环信02.1_环信 SDK 2.x到3.0升级文档

    李洪强iOS开发之-环信02.1_环信 SDK 2.x到3.0升级文档 SDK 2.x 至 3.0 升级指南 环信 SDK 3.0 升级文档 3.0 中的核心类为 EMClient 类,通过 EMCl ...

  3. 李洪强iOS开发之-入门指南

    李洪强iOS开发之-入门指南 1零基础小白如何进行iOS系统学习 首先,学习目标要明确:其次,有了目标,要培养兴趣,经常给自己一些正面的反馈,比如对自己的进步进行鼓励,在前期小步快走:再次,学技术最重 ...

  4. 李洪强iOS开发之添加手势

    李洪强iOS开发之添加手势 02 - 添加手势

  5. 李洪强iOS开发之- 实现简单的弹窗

     李洪强iOS开发之- 实现简单的弹窗 实现的效果:  112222222222223333333333333333

  6. 李洪强iOS开发之后使用XIB实现横向滚动的UIScrollView

    李洪强iOS开发之后使用XIB实现横向滚动的UIScrollView 11111222

  7. 李洪强iOS开发之苹果使用预览截图

    李洪强iOS开发之苹果使用预览截图 01 在预览的图片中选中你要截得区域  02 - command + C   03 - Command + N 04 - Command + S (保存)

  8. 李洪强iOS开发之通知的使用

    李洪强iOS开发之通知的使用 01 - 在A中发送通知 02 - 在B中监听通知 03 - 在B中通知出发的方法 04 - 在B控制器viewDidLoad调用通知

  9. 李洪强iOS开发之后使用纯代码实现横向滚动的UIScrollView

    李洪强iOS开发之后使用纯代码实现横向滚动的UIScrollView (VTmagic是一个实现左右滚动的控制器的框架,也可以实现此功能) 实现的效果:  01 - 创建四个控制器 02 - 定义需要 ...

随机推荐

  1. centos下两种方法安装git

    来自:http://blog.slogra.com/post-176.html 今天下个包需要使用git,网上找了下看到大多数只有编译安装,并且编译安装还有错,不知道他们也没有实验过,这里我来给大家介 ...

  2. Unix 网络编程 读书笔记2

    第三章 套接字编程简介 每一个 Socket 都用一个半相关描述:{协议,本地地址,本地端口}一个完整的 Socket 则用一个相关描述{协议,本地地址,本地端口,远程地址,远程端口}每一个 Sock ...

  3. 〖Linux〗Qt+gsoap开发客户端程序,服务端地址设定的字符串转换处理

    之所以写出来,是由于经常因为这个问题屡屡丢面子.. 一般情况下,QString转换成(char*),我们一般直接使用: char *str = qstr->text().toLatin1().d ...

  4. centos7 开启ftp服务

    1.关闭默认防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewa ...

  5. LoadRunner 检查点函数总结

    今天我来总结一下Loadrunner中的检查点函数,主要介绍两个函数:web_find()和web_reg_find() 这两个函数均用于内容的查找,但两者也有本质的区别,具体介绍如下: 一.web_ ...

  6. scala中:: , +:, :+, :::, +++的区别

    4种操作符的区别和联系 一. ::   该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表. 用法为 x::list,其中x为加入到 头部的元素,无论x是列表与否,它都只将成为新生成列 ...

  7. iOS - Bundle 资源文件包

    1.Bundle 文件 Bundle 文件,简单理解,就是资源文件包.我们将许多图片.XIB.文本文件组织在一起,打包成一个 Bundle 文件.方便在其他项目中引用包内的资源. Bundle 文件是 ...

  8. 使用select函数改进客户端/服务器端程序

    一.当我们使用单进程单连接且使用readline修改后的客户端程序,去连接使用readline修改后的服务器端程序,会出现一个有趣的现象,先来看输出: 先运行服务器端,再运行客户端, simba@ub ...

  9. Posix共享内存区

    1.概述 Posix提供了两种在无亲缘关系进程间共享内存区的方法: (1)内存映射文件:先有open函数打开,然后调用mmap函数把得到的描述符映射到当前进程地址空间中的一个文件(上一篇笔记所用到的就 ...

  10. 计算机科学基础知识(一)The Memory Hierarchy

    一.前言 最近一个问题经常萦绕在我的脑海:一个学习电子工程的机械师如何称为优秀的程序员?(注:本文作者本科学习机械设计,研究生转到电子工程系学习,毕业后却选择了系统程序员这样的职业).经过思考,我认为 ...