//
// 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

最新文章

  1. RabbitMQ系列之Centos 7安装RabbitMQ 3.6.1
  2. 第七章:利用AdaBoost元算法提高分类性能
  3. windbg----as、$u0(固定别名、自定义别名)
  4. 深入DNS
  5. 手把手教你Android来去电通话自动录音的方法
  6. mysql server advanced 5.6基于oracle linux 6.6的安装
  7. Maven和Eclipse联合开发(转)
  8. stm32驱动DS1302芯片
  9. exjs上传图片异常:com.jspsmart.upload.SmartUploadException: File can&#39;t be saved (1120).
  10. 读取指定文件夹下的全部文件,可通过正则进行过滤,返回文件路径数组 -- 基于node的一个函数
  11. [整理]k-vim-for-server通过vimrc修改vim格式
  12. abstract class和interface有什么区别?
  13. OTL翻译(3) -- OTL的主要类
  14. Android中Tablayout设置下划线宽度 和 dp和px之间进行相互转换
  15. sqlserver2008事务日志已满
  16. InteliJ中文乱码;IDE快捷键使用
  17. 【xampp】windows下XAMPP集成环境中,MySQL数据库的使用
  18. vmware中三种网络连接方式
  19. java访问ad域
  20. JVM安全退出(如何优雅的关闭java服务)

热门文章

  1. PaaS基础学习(1)
  2. {ubuntu}乱七八糟重命名为1 2 3.....png
  3. java 序列化Serializable 详解
  4. IOS7适配
  5. redis 一些使用过的命令
  6. vector容器类型
  7. HTML5文档结构 摘要
  8. FZU 1977 Pandora adventure (插头DP,常规)
  9. fun下载内容批量收集
  10. feature map计算大小公式