SQLite数据库实际运用

前端之家收集整理的这篇文章主要介绍了SQLite数据库实际运用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

sqlite在我们这些运用过其他数据库的人手里,其实根本就不算是数据库,因为sqlite实在是太小了,而且sqlite中的数据类型 (name text,age integer,phoneNo text)都是假的,只是为了和其他数据库一样操作而已!下面是sqlite中经常运用的操作语句

– 创建数据表,定义存储数据信息表的结构
–CREATE TABLE T_Student (name text,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,age FROM T_Person ORDER BY age ASC,height DESC;

介绍完上面的基本操作语句之后,我们运用sqlite来做一个实例:
/**
sqlite3使用步骤

名词解释:handle句柄,在C语言中,通常把用于控制某类东西的叫做句柄,实际上是一个指针。
通过这个指针就可以达到操作对象的目的。

sqlITE_OK 表示数据库操作成功

  1. 先要有一个数据库,放在Bundle中还是放在沙盒里?

  2. MainBundle是只读的,如果是菜谱、中国全史只是看不用修改的可以放在Bundle中

  3. 如果需要对数据进行操作,数据库文件应该放在沙盒中!

    sqlite3_open 打开数据库

  4. 创建数据表

  5. 定义数据操作sql

  6. 调用sqlite3_exec执行sql

    提示:为了避免重复建表,可以在建表sql增加 IF NOT EXISTS

  7. 单步执行操作
    1> 增加数据
    2> 修改数据
    3> 删除数据
    定义sql执行
    sqlITE_OK == sqlite3_exec

  8. 查询语句
    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_exec

    sqlite3_prepare_v2
    sqlite3_step

    sqlite3_column_text 取字符串
    sqlite3_column_int 取整数
    sqlite3_column_double 取浮点数
    两个枚举
    sqlITE_OK
    sqlITE_ROW
    */

下面是代码部分,我的pyPerson类就省略了哦!,还有沙盒存储的sqlite路径也省略了哦!!!!!

<!--lang:cpp-->
//

// 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. 增加个人记录
    // 自己编写程序,生成随机的数据,以便在单机开发中测试
    // NSArrayarray = @[@“李四”,@“王五”,@“赵六”,@“刘老头”];
    //
    // 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=[nameNSStringWithDocDir];
//创建数据库

/**
sqlite3_open

1)如果数据库存在,直接打开
2)如果数据库不存在,先创建数据库文件,再打开
*/
//NSLog(@"%@",docDir);
_db=NULL;
//这里一定要是const转换为常量,因为这是c语言的库

if(sqlITE_OK==sqlite3_open([docDirUTF8String],&_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=@"CREATETABLEIFNOTEXISTST_Person(idINTEGERNOTNULLPRIMARYKEYAUTOINCREMENT,nameTEXT,genderINTEGER,ageINTEGER,heightREAL)";
//NSString*sql=[NSStringstringWithFormat:@"createtable'%@'",string];
char*err=nil;
if(sqlITE_OK==sqlite3_exec(_db,[sqlUTF8String],nil,&err)){
NSLog(@"创建成功");
}else
{
NSLog(@"数据库表创建失败%s",err);
}

}

pragma mark -设置添加数据

-(void)addValue:(pyPerson *)p
{

NSString*str=[NSStringstringWithFormat:@"INSERTINTOT_Person(name,height)VALUES('%@',%d,%f)",p.name,p.gender,p.age,p.height];
//执行数据
[selfsql:str];

pragma mark -执行方法

-(void)sql:(NSString *)str
{

char*err=NULL;
if(sqlITE_OK==sqlite3_exec(_db,[strUTF8String],&err)){
NSLog(@"成功插入数据");
}else
{
NSLog(@"插入数据失败");
}

pragma mark 查询数据

-(void)selectData
{

NSMutableArray*arr=Nil;
//1.查询语句
NSString*sql=@"selectid,heightfromT_Person";
//2.检测查询语句是否错误
sqlite3_stmt*stmt=Nil;
if(sqlITE_OK==sqlite3_prepare_v2(_db,-1,&stmt,NULL)){
//sqlite3_step(stmt)是获取
while(sqlITE_ROW==sqlite3_step(stmt)){
NSIntegeri=sqlite3_column_int(stmt,0);
constunsignedchar*name=sqlite3_column_text(stmt,1);
intage=sqlite3_column_int(stmt,2);
intgender=sqlite3_column_int(stmt,3);
CGFloatheight=sqlite3_column_int(stmt,4);
NSString*myname=[NSStringstringWithUTF8String:(constchar*)name];

// NSLog(@“%@—%d”,myname,age);

pyPerson*person=[pyPersonpyPersonWithID:iwithName:mynamewithGender:genderwithAge:agewithHeight:height];
[arraddObject:person];
NSLog(@"%@---%d",person.name,person.age);
}
}else
{
NSLog(@"语法错误");
}
//NSLog(@"%@",arr);

}

原文链接:https://www.f2er.com/sqlite/199793.html

猜你在找的Sqlite相关文章