ios sqlite 简单使用
//
// ViewController.m
// sqlitedemo
//
// Created by lam_TT on 15-4-11.
// Copyright (c) 2015年 lam_TT. All rights reserved.
// #import "ViewController.h"
#import <sqlite3.h>
@interface ViewController () {
sqlite3 *_db;
} @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
[self openSQLite];
[self initButton]; } - (void)initButton {
NSArray *array = [[NSArray alloc]initWithObjects:@"增",@"删",@"改",@"查", nil];
for (int i = 0; i < 4; i ++) {
UIButton *button = [[UIButton alloc]init];
button.bounds = CGRectMake(0, 0, 150, 30);
button.tag = 10 + i;
[button setTitle:array[i] forState:UIControlStateNormal];
button.backgroundColor = [UIColor grayColor];
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
button.center = CGPointMake(CGRectGetWidth(self.view.bounds)/2, 100 + i * 50);
[self.view addSubview:button];
}
} #pragma mark - 按钮点击事件 - (void)buttonPressed:(UIButton *)sender {
NSInteger index = sender.tag - 10; switch (index) {
case 0:
[self initInsertData];
break; case 1:
[self initDelete];
break;
case 2:
[self initUpdata];
break;
case 3:
[self initSelect];
break;
} } #pragma mark - 创建数据库
- (void)openSQLite {
// sqlite3 *db;
//路径
NSString *string = [NSString stringWithFormat:@"%@/Documents",NSHomeDirectory()];
NSString *fileName = [string stringByAppendingString:@"/students.sqlite"];
//OC-C
const char *cfileName = fileName.UTF8String; //打开数据库,没有就自动创建
int result = sqlite3_open(cfileName, &_db); if (result == SQLITE_OK) {
NSLog(@"成功打开数据库");
}else {
NSLog(@"打开数据库失败");
}
//可用sqliteManger查看 #pragma mark - 创建表 const char *sql="CREATE TABLE IF NOT EXISTS t_students (id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);"; char *errmsg = NULL; //参数:第一个参数为数据库的句柄(db),第二个参数为sql语句,第三个参数为回调参数,是一个指向函数的指针,如果把callback前面的*改成^则就是一个block代码段,第四个参数可以写NULL,第五个参数为错误信息,用以代码调试。
result = sqlite3_exec(_db, sql, NULL, NULL, &errmsg); if (result == SQLITE_OK) {
NSLog(@"创建表成功");
}else {
printf("创表失败---%s----%s---%d",errmsg,__FILE__,__LINE__);
}
} #pragma mark - 插入数据 - (void)initInsertData { for (int i = 0; i < 20; i ++) {
//1.拼接sql语句 NSString *name = [NSString stringWithFormat:@"数据--%d",arc4random_uniform(100)]; int age = arc4random_uniform(20) + 10; NSString *sql=[NSString stringWithFormat:@"INSERT INTO t_students (name,age) VALUES ('%@',%d);",name,age]; //2.执行sql语句 char *errmsg = NULL;
sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
if (errmsg) { //如果有错误信息
NSLog(@"插入数据失败-- %s",errmsg);
}else {
NSLog(@"插入数据成功");
} } } #pragma mark - 选择(select)查询操作 - (void)initSelect {
//从这个表里面查找年龄小于20得数据
const char *sql="SELECT id,name,age FROM t_students WHERE age<20;";
sqlite3_stmt *stmt = NULL; //进行查询前得准备工作 if (sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL) == SQLITE_OK) { //SQL语句没有问题
NSLog(@"SQL语句没有问题");
//每调用一次sqlite_step函数,stmt就会指向下一条记录
while (sqlite3_step(stmt) == SQLITE_ROW) {
//取出数据
//(1)取出第0列字段得值(int类型得值)
int ID = sqlite3_column_int(stmt, 0);
//(2)取出第2列字段得值(text类型得值)
const unsigned char *name = sqlite3_column_text(stmt, 1);
//(3)取出第2列字段得值
int age = sqlite3_column_int(stmt, 2);
printf("%d %s %d\n",ID,name,age);
} }else {
NSLog(@"查询语句有问题,或者没有数据");
} } #pragma mark - 删除数据 - (void)initDelete {
const char *sql = "delete from t_students";
char *errmsg = NULL;
sqlite3_exec(_db, sql, NULL, NULL, &errmsg);
if (errmsg) {
NSLog(@"删除失败");
}else {
NSLog(@"删除成功");
}
} - (void)initUpdata {
const char *sql = "update t_students set name = '小明' , age = 16 ;";
char *errmsg = NULL;
sqlite3_exec(_db, sql, NULL, NULL, &errmsg);
if (errmsg) {
NSLog(@"修改失败");
}else {
NSLog(@"修改成功");
}
} @end
ios sqlite 简单使用的更多相关文章
- iOS开发数据库篇—SQLite简单介绍
iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1 ...
- 【转】 iOS开发数据库篇—SQLite简单介绍
开始学SQLite啦, 原文: http://www.cnblogs.com/wendingding/p/3868893.html iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中 ...
- iOS - SQLite Database 操作数据库
iOS - SQLite Database 操作数据库 Sqlite 能被用在ios上做数据处理用,只要你懂得一点sql 就很容易使用sqlite 1:创建一个简单的View based appl ...
- SQLite简单介绍
一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyed ...
- iOS上简单推送通知(Push Notification)的实现
iOS上简单推送通知(Push Notification)的实现 根据这篇很好的教程(http://www.raywenderlich.com/3443/apple-push-notification ...
- iOS sqlite数据库实现(转)
转载自:http://www.cnblogs.com/macroxu-1982/archive/2012/10/01/2709960.html 1 实现过程添加libsqlite3组件 选择项目后,在 ...
- ios sqlite的创建数据库,表,插入查看数据
iOS sqlite数据库操作.步骤是: 先加入sqlite开发库libsqlite3.dylib, 新建或打开数据库, 创建数据表, 插入数据, 查询数据并打印 1.新建项目sqliteDemo,添 ...
- iOS CAReplicatorLayer 简单动画
代码地址如下:http://www.demodashi.com/demo/11601.html 写在最前面,最近在看学习的时候,偶然间发现一个没有用过的Layer,于是抽空研究了下,本来应该能提前记录 ...
- iOS sqlite
iOS sqlite数据库操作.步骤是: 先加入sqlite开发库libsqlite3.dylib, 新建或打开数据库, 创建数据表, 插入数据, 查询数据并打印 1.新建项目sqliteDemo,添 ...
随机推荐
- WebService学习之旅(一)使用JAX-WS发布WebService
JAX-WS全称Java™ API for XML Web Services,是随着JDK1.6及其后续版本发布的方便Java程序员开发WebService应用的一组API,通常简称为JWS,目前版本 ...
- 再谈Android AsyncTask的优缺点
导语:之前做习惯了Framework层的开发,今天在武汉斗鱼公司面试APP客户端的开发,其中一道题是讲述Asynctask的优缺点,我靠,我只是知道有这么一个东西,会用而已,看来之前的生活太过于安逸, ...
- ssh框架出现Java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误
原因:因为Struts自带的antlr-2.7.2.jar,比Hibernate自带的antlr-2.7.7.jar的版本要低,存在jar包冲突现象,因此要删除前一个低版本的. 由于myeclipse ...
- IOS命名
NS开头的名称不要出现. NS系统名称开头. 命名缩写只用于通用专业术语,如URL,不可自创命名缩写,如Ctr.Msg.命名宁可长一些,也不要难于理解. 是否在看别人代码时各种缩写而不知其所以然?简短 ...
- iOS Category 添加属性实现原理 - 关联对象
iOS Category 添加属性实现原理 - 关联对象 RunTime为Category动态关联对象 使用RunTime给系统的类添加属性,首先需要了解对象与属性的关系.对象一开始初始化的时候其属性 ...
- 面试题--JAVA中静态块、静态变量加载顺序
最后给大家一道面试题练练手,要求写出其结果(笔试) public class StaticTest { public static int k = 0; public static StaticTes ...
- spring_boot入门
核心: 控制反转(Inversion of Control-IOC)和依赖注入(Dependency Injection-DI) Spring中两者是相同的, 控制反转是用依赖注入实现的. 这里, 依 ...
- NSCopying协议和copy方法
不是所有的对象都支持 copy需要继承NSCopying 协议(实现 copyWithZone: 方法)同样,需要继承NSMutableCopying 协议才可以使用mutableCopy(实现 mu ...
- java多线程---ReentrantLock源码分析
ReentrantLock源码分析 基础知识复习 synchronized和lock的区别 synchronized是非公平锁,无法保证线程按照申请锁的顺序获得锁,而Lock锁提供了可选参数,可以配置 ...
- 背包问题2 (lintcode)
这里: for(int j = 1;j <= m;j++) result[0][j] = 0x80000000; 不能从0开始,result[0][0]是可以取到的,是0.其他情况取不到才用最小 ...