SQLite数据库实际运用
来源:互联网 发布:淘宝网渔具大全价格 编辑:程序博客网 时间:2024/05/21 03:27
SQLite在我们这些运用过其他数据库的人手里,其实根本就不算是数据库,因为sqlite实在是太小了,而且sqlite中的数据类型 (name text, age integer, phoneNo text)都是假的,只是为了和其他数据库一样操作而已!下面是SQLite中经常运用的操作语句
– 创建数据表,定义存储数据信息表的结构
–CREATE TABLE T_Student (name text, age integer, phoneNo text);
– 删除数据表,通常在上需要使用某一个表的时候,才会用到,日常开发中极少会用到此命令
–DROP TABLE T_Student;
– 新增数据内容,在SQL语句中,字符串需要用单引号引起
– 插入语句的语法格式:
– INSERT INTO 表吊 (字段1, 字段2, …) VALUES (字段1数值, 字段2数值, …)
– INSERT INTO T_Person (name, age, gender, height) VALUES ('小花1', 20, 1, 1.62);
– 更新数据库内容
– 更新所有记录
– UPDATE T_Person SET name = '王二麻子';
– 条件修改 WHERE (要修改、操作的记录在哪里)
– UPDATE T_Person SET name = '小芳' WHERE gender = 1;
– 使用AND可以设置与条件
– 使用OR可以设置或条件
– 更新记录的语法格式
– UPDATE 表吊 SET 字段1 = 字段1数值, 字段2 = 字段2数值, … WHERE 要修改的条件
– UPDATE T_Person SET name = '西门吹雪', age = 45 WHERE age = 60 AND height = 1.65;
– UPDATE T_Person SET name = '悟空' WHERE age = 18 OR height = 1.72;
– 删除记录
– 删除的语法格式
– DELETE FROM 表吊 WHERE 要删除的条件
– DELETE FROM T_Person WHERE height = 1.8;
– 查询指令
– SELECT * FROM T_Person;
– 条件查询
– 查询所有的男的
– SELECT * FROM T_Person WHERE gender = 1;
– 查询年龄大于10岁,同时是男士
– SELECT * FROM T_Person WHERE age > 10 AND gender = 0;
– 查询Person表中的记录总数
— SELECT count(*) FROM T_Person;
– 查询最高的身高
– SELECT max(height) FROM T_Person;
– SELECT min(age) FROM T_Person;
– 查询所有男士的平均身高
— SELECT avg(height) FROM T_Person WHERE gender = 0;
– 分页查询
– 从第0条记录开始,查询3条记录
– LIMIT 的第一个参数表示:从第几行记录开始查询,起始行数是0
– LIMIT 的第二个参数表示:本次查询需要查询的记录数量
– SELECT * FROM T_Person LIMIT 0, 3;
– SELECT * FROM T_Person LIMIT 3, 3;
– SELECT * FROM T_Person LIMIT 6, 3;
– 排序
– ORDER BY 要排序的字段吊
– ASC 表示升序
– DESC 表示降序
– 如果有多个字段参与排序,先排第一个字段,让后依次类推,即:第一个字段的排序优先级最高!
SELECT height, name, gender, age FROM T_Person ORDER BY age ASC, height DESC;
介绍完上面的基本操作语句之后,我们运用sqlite来做一个实例:
/**
SQLite3使用步骤
名词解释:handle句柄,在C语言中,通常把用于控制某类东西的叫做句柄,实际上是一个指针。
通过这个指针就可以达到操作对象的目的。
SQLITE_OK 表示数据库操作成功
先要有一个数据库,放在Bundle中还是放在沙盒里?
MainBundle是只读的,如果是菜谱、中国全史只是看不用修改的可以放在Bundle中
如果需要对数据进行操作,数据库文件应该放在沙盒中!
sqlite3_open 打开数据库
- 如果数据库已经存在,直接打开
- 如果数据库不存在,新建一个空白的数据库(0KB),然后再打开
创建数据表
定义数据操作SQL
调用sqlite3_exec执行SQL
提示:为了避免重复建表,可以在建表SQL中增加 IF NOT EXISTS
单步执行操作
1> 增加数据
2> 修改数据
3> 删除数据
定义SQL执行
SQLITE_OK == sqlite3_exec查询语句
1> 准备SQL
2> 检查SQL语句是否正确 sqlite3_prepare_v2
3> 单步执行,依次获取查询到的记录 SQLITE_ROW == sqlite3_step(stmt
4> 按照查询顺序,依次取出每一个字段的内容sqlite3_column_text 取字符串
sqlite3_column_int 取整数
sqlite3_column_double 取浮点数操作SQLite数据库需要5个方法
sqlite3_open
sqlite3_execsqlite3_prepare_v2
sqlite3_stepsqlite3_column_text 取字符串
sqlite3_column_int 取整数
sqlite3_column_double 取浮点数
两个枚举
SQLITE_OK
SQLITE_ROW
*/
下面是代码部分,我的pyPerson类就省略了哦!,还有沙盒存储的sqlite路径也省略了哦!!!!!
// pyViewController.m
// 010601-SQLite
//
// Created by panyong on 14-1-6.
// Copyright (c) 2014年 panyong. All rights reserved.
//
import “pyViewController.h”
import “NSString+DocDir.h”
import
import “pyPerson.h”
@interface pyViewController ()
{
sqlite3 *_db;
}
@end
@implementation pyViewController
(void)viewDidLoad
{
[super viewDidLoad];
//创建数据库
[self createSQLite];//创建数据库表
[self createTableWithName:@“userInfo”];//添加数据
// 3. 增加个人记录
// 自己编写程序,生成随机的数据,以便在单机开发中测试
// NSArray array = @[@“李四”, @“王五”, @“赵六”, @“刘老头”];
//
// for (NSInteger i = 0; i < 50; i++) {
// NSString name = [NSString stringWithFormat:@“%@%04d”, array[arc4random_uniform(array.count)], arc4random_uniform(10000)];
// NSInteger age = arc4random_uniform(20) + 18;
// CGFloat height = arc4random_uniform(30) / 100.0f + 1.5f;
//
// pyPerson *p = [pyPerson pyPersonWithID:0 withName:name withGender:1 withAge:age withHeight:height] ;
//
// [self addValue:p];
// }//4查询数据
[self selectData];
}
pragma mark –创建数据库
-(void)createSQLite
{
//数据库的路径
NSString *name = @
"opensqlite.db"
;
NSString *docDir = [name NSStringWithDocDir];
//创建数据库
/**
sqlite3_open
1) 如果数据库存在,直接打开
2) 如果数据库不存在,先创建数据库文件,再打开
*/
//NSLog(@"%@",docDir);
_db = NULL;
//这里一定要是const转换为常量,因为这是c语言的库
if
(SQLITE_OK == sqlite3_open([docDir UTF8String], &_db)) {
NSLog(@
"数据库打开成功"
);
}
else
{
NSLog(@
"数据库打开失败"
);
}
}
//SQLITE_API int sqlite3_exec(
// sqlite3, / An open database /
// const char sql, / SQL to be evaluated /
// int (callback)(void,int,char,char), / Callback function/
// void , / 1st argument to callback /
// char errmsg / Error msg written here */
//);
pragma mark -添加数据库表
-(void)createTableWithName:(NSString *)string
{
// 创建数据库 T_ 表示的是表的前缀,
NSString *sql = @
"CREATE TABLE IF NOT EXISTS T_Person (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, gender INTEGER, age INTEGER, height REAL)"
;
//NSString *sql = [NSString stringWithFormat:@"create table '%@'",string];
char
*err = nil ;
if
(SQLITE_OK == sqlite3_exec(_db, [sql UTF8String], nil, nil, &err)) {
NSLog(@
"创建成功"
);
}
else
{
NSLog(@
"数据库表创建失败 %s"
,err);
}
}
pragma mark -设置添加数据
-(void)addValue:(pyPerson *)p
{
NSString *str = [NSString stringWithFormat:@
"INSERT INTO T_Person (name, gender, age, height) VALUES ('%@', %d, %d, %f)"
,p.name,p.gender,p.age,p.height];
//执行数据
[self sql:str];
}
pragma mark -执行方法
-(void)sql:(NSString *)str
{
char
*err = NULL ;
if
(SQLITE_OK == sqlite3_exec(_db, [str UTF8String], nil, nil, &err)) {
NSLog(@
"成功插入数据"
);
}
else
{
NSLog(@
"插入数据失败"
);
}
}
pragma mark 查询数据
-(void)selectData
{
NSMutableArray *arr = Nil ;
//1.查询语句
NSString *sql = @
"select id, name, age, gender, height from T_Person "
;
//2.检测查询语句是否错误
sqlite3_stmt *stmt = Nil ;
if
(SQLITE_OK ==sqlite3_prepare_v2(_db, [sql UTF8String], -
1
, &stmt, NULL) ) {
//sqlite3_step(stmt)是获取
while
(SQLITE_ROW == sqlite3_step(stmt)) {
NSInteger i = sqlite3_column_int(stmt,
0
);
const
unsigned
char
*name = sqlite3_column_text(stmt,
1
);
int
age = sqlite3_column_int(stmt,
2
);
int
gender = sqlite3_column_int(stmt,
3
);
CGFloat height = sqlite3_column_int(stmt,
4
);
NSString *myname = [NSString stringWithUTF8String:(
const
char
*)name];
// NSLog(@“%@—%d”,myname,age);
pyPerson *person = [pyPerson pyPersonWithID:i withName:myname withGender:gender withAge:age withHeight:height];
[arr addObject:person];
NSLog(@
"%@---%d"
,person.name,person.age);
}
}
else
{
NSLog(@
"语法错误"
);
}
//NSLog(@"%@",arr);
}
@end
- SQLite数据库实际运用
- SQLite数据库实际运用
- SQLite数据库的运用:
- sqlite数据库的简单运用
- python与轻量级数据库SQLite的运用
- Android 数据库SQLITE(SQLITEOPENHELPER运用)
- ios运用fmdb建SQLite数据库
- android sqlite轻量级数据库的基本运用之创建数据库
- lucene实际运用
- 算法实际运用
- fusioncharts的实际运用
- 反射实际运用
- memcache实际运用场景
- AcionBar的实际运用
- 观察者模式实际运用
- 在windows 8 运用sqlite开源数据库
- SQLite数据库的使用之运用SQL语句
- 数据库设计的14个技巧--在实际开发中,注意运用体会吧
- Android Building System 分析
- linux下安装iasp以及apache多站点虚拟主机配置
- 为什么NSView只能在主线程刷新
- 云计算设计模式(十四)——实体化视图模式
- 一个C++菜鸟的成长史
- SQLite数据库实际运用
- 分享个测试接口好工具 Dev Http Client
- 截取部分屏幕
- MatLab与其他面向对象语言的比较
- Openstack 中的LoadBalance As A Service
- vim——打开多个文件、同时显示多个文件、在文件之间切换
- php能创建session, 但是不能写 session 的问题
- PLSQL WEBSERVICES 发布
- Substring with Concatenation of All Words