//
// 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 简单使用的更多相关文章

  1. iOS开发数据库篇—SQLite简单介绍

    iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1 ...

  2. 【转】 iOS开发数据库篇—SQLite简单介绍

    开始学SQLite啦, 原文: http://www.cnblogs.com/wendingding/p/3868893.html iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中 ...

  3. iOS - SQLite Database 操作数据库

    iOS - SQLite Database 操作数据库   Sqlite 能被用在ios上做数据处理用,只要你懂得一点sql 就很容易使用sqlite 1:创建一个简单的View based appl ...

  4. SQLite简单介绍

    一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyed ...

  5. iOS上简单推送通知(Push Notification)的实现

    iOS上简单推送通知(Push Notification)的实现 根据这篇很好的教程(http://www.raywenderlich.com/3443/apple-push-notification ...

  6. iOS sqlite数据库实现(转)

    转载自:http://www.cnblogs.com/macroxu-1982/archive/2012/10/01/2709960.html 1 实现过程添加libsqlite3组件 选择项目后,在 ...

  7. ios sqlite的创建数据库,表,插入查看数据

    iOS sqlite数据库操作.步骤是: 先加入sqlite开发库libsqlite3.dylib, 新建或打开数据库, 创建数据表, 插入数据, 查询数据并打印 1.新建项目sqliteDemo,添 ...

  8. iOS CAReplicatorLayer 简单动画

    代码地址如下:http://www.demodashi.com/demo/11601.html 写在最前面,最近在看学习的时候,偶然间发现一个没有用过的Layer,于是抽空研究了下,本来应该能提前记录 ...

  9. iOS sqlite

    iOS sqlite数据库操作.步骤是: 先加入sqlite开发库libsqlite3.dylib, 新建或打开数据库, 创建数据表, 插入数据, 查询数据并打印 1.新建项目sqliteDemo,添 ...

随机推荐

  1. WebService学习之旅(六)使用Apache Axis2实现WebService客户端调用

    上节介绍了如何使用Axis2 发布一个WebService,Axis2除了为我们编写WebService应用带来了便利,也同样简化的客户端调用的过程,本节在上节的基础上使用Axis2自带的工具生成客户 ...

  2. WebService学习之旅(三)JAX-WS与Spring整合发布WebService

    Spring本身就提供了对JAX-WS的支持,有兴趣的读者可以研究下Spring的Spring-WS项目,项目地址: http://docs.spring.io/spring-ws/sites/1.5 ...

  3. shell框架

    #!/bin/bash#注释#注释#环境变量相关,如下PATH=/sbin:/bin:/usr/bin:/usr/sbin #引入库函数,如下,类似于c语言的#include "*.h&qu ...

  4. 目后佐道IT教育的品牌故事

    关于目后佐道 目后佐道IT教育作为中国IT职业教育领导品牌,致力于HTML5.UI.PHP.Java+大数据.Python+人工智能.Linux.产品经理.测试.运维等课程培训.100%全程面授,平均 ...

  5. Cairo Drawing Model

    Cairo Drawing Model Cairo是一个强力的2D绘图库. Destination 是你最终绘图的目标, 可以是一系列Pixel或者绑定到SVG或PDF文件上. Source 是实际在 ...

  6. Vue之父子组件的通信

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. (2)JSTL的fmt国际化标签库

    format标签库:做国际化格式化,分两类 : 国际化核心标签:<fmt:setLocale>.<fmt:bundle>.<fmt:setBundle>.<f ...

  8. [Tkinter 教程] 布局管理 (Pack Place Grid)

    原系列地址: Python Tkinter 简介: 本文讲述如何使用 tkinter 的布局管理 (被称作 layout managers 或 geometry managers). tkinter ...

  9. STATIC 和 CLASS

    STATIC 和 CLASS 由 王巍 (@ONEVCAT) 发布于 2015/01/28 Swift 中表示 “类型范围作用域” 这一概念有两个不同的关键字,它们分别是 static 和 class ...

  10. [LUOGU] P1111 修复公路

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...