SQLite3的运用

1、导入库文件:libsqlite3。

2、.m文件的代码:

  1 //
  2 //  ViewController.m
  3 //  SQLite3的运用
  4 //
  5 //  Created by PengYunjing on 16/9/24.
  6 //  Copyright © 2016年 PYJ. All rights reserved.
  7 //
  8
  9 /**
 10  *  说明:
 11  *  sqlite3           *ppDb, 数据库句柄,跟文件句柄FILE很类似
 12  *  sqlite3_stmt      *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句
 13  *  sqlite3_open(),   打开数据库,没有数据库时创建。
 14  *  sqlite3_exec(),   执行非查询的sql语句
 15  *  sqlite3_step(),   在调用sqlite3_prepare后,使用这个函数在记录集中移动。
 16  *  sqlite3_close(),  关闭数据库文件
 17  *
 18  *  还有一系列的函数,用于从记录集字段中获取数据,如
 19  *  sqlite3_column_text(), 取text类型的数据。
 20  *  sqlite3_column_blob(), 取blob类型的数据
 21  *  sqlite3_column_int(),  取int类型的数据
 22  */
 23
 24 #import "ViewController.h"
 25 #import <sqlite3.h>
 26
 27 //设置数据库的路径
 28 #define FileName [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"personinfo.sqlite"]
 29
 30 @interface ViewController ()
 31
 32 @end
 33
 34 @implementation ViewController
 35 //设置句柄, 通过句柄对数据库进行操作
 36 static sqlite3 *ppDb = nil;
 37
 38 - (void)viewDidLoad {
 39     [super viewDidLoad];
 40
 41     NSLog(@"%@", FileName);
 42
 43     [self open];
 44 }
 45
 46 /** 创建一个独立的执行sql语句的方法,传入sql语句,就执行sql语句 */
 47 -(void)execSql:(NSString *)sql {
 48
 49     char *errmsg; //错误信息
 50
 51     if (sqlite3_exec(ppDb, [sql UTF8String], NULL, NULL, &errmsg) != SQLITE_OK) {
 52         sqlite3_close(ppDb);
 53         NSLog(@"数据库操作数据失败!");
 54     }
 55
 56 }
 57
 58 /** 打开数据库(如果没有就会新建一个) */
 59 - (void)open {
 60
 61     //操作代码(sql)用来创建表格,注意要转换为c的字符串,结束处有 ; 符号
 62     NSString *sql = @"create table if not exists personinfo (id integer primary key autoincrement,name text, age integer, address text);";
 63
 64     if (sqlite3_open([FileName UTF8String], &ppDb) == SQLITE_OK) {
 65
 66         char *errmsg; //错误信息
 67
 68         //建表
 69         sqlite3_exec(ppDb, [sql UTF8String], NULL, NULL, &errmsg);
 70         if (errmsg) {
 71             NSLog(@"建表失败 -- %s",errmsg);
 72         }
 73
 74     }else {
 75         NSLog(@"打开数据库失败!");
 76     }
 77
 78 }
 79
 80 /** 增 */
 81 - (IBAction)insert {
 82
 83     NSString *sql1 = [NSString stringWithFormat:@"insert into personinfo (name, age, address) values(‘%@‘, ‘%@‘, ‘%@‘);", @"赵一",  @"20",  @"北京"];
 84     NSString *sql2 = [NSString stringWithFormat:@"insert into personinfo (name, age, address) values(‘%@‘, ‘%@‘, ‘%@‘);", @"钱二",  @"22",  @"上海"];
 85     NSString *sql3 = [NSString stringWithFormat:@"insert into personinfo (name, age, address) values(‘%@‘, ‘%@‘, ‘%@‘);", @"张三",  @"24",  @"广州"];
 86     NSString *sql4 = [NSString stringWithFormat:@"insert into personinfo (name, age, address) values(‘%@‘, ‘%@‘, ‘%@‘);", @"李四",  @"23",  @"深圳"];
 87     NSString *sql5 = [NSString stringWithFormat:@"insert into personinfo (name, age, address) values(‘%@‘, ‘%@‘, ‘%@‘);", @"刘五",  @"26",  @"北京"];
 88
 89     [self execSql:sql1];
 90     [self execSql:sql2];
 91     [self execSql:sql3];
 92     [self execSql:sql4];
 93     [self execSql:sql5];
 94
 95 }
 96
 97 /** 删 */
 98 - (IBAction)delete {
 99
100     //删除id 大于1 且 小于4 的数据
101     NSString *sql = @"delete from personinfo where id > 1 and id < 4;";
102     [self execSql:sql];
103
104 }
105
106 /** 改 */
107 - (IBAction)update {
108
109     //这里把id为“1”的”name”更改为 “Hello World”
110     NSString *sql = @"update personinfo set name = ‘Hello World‘ where id = 1;";
111     [self execSql:sql];
112
113 }
114
115 /** 查 */
116 - (IBAction)select {
117
118     //打开数据库
119     [self open];
120
121     //查询所有信息
122 //    NSString *sql = @"select * from personinfo;";
123     //按条件查询
124 //    NSString *sql = @"select * from personinfo where age > 21 and age < 23;";
125 //    NSString *sql = @"select * from personinfo where age between 20 and 22;";
126 //    NSString *sql = @"select * from personinfo where address in (‘北京‘, ‘深圳‘);";
127     NSString *sql = @"select * from personinfo where address in (‘北京‘, ‘深圳‘) and age between 23 and 26;";
128
129     //查询的句柄,游标
130     sqlite3_stmt *stmt;
131
132     if (sqlite3_prepare(ppDb, [sql UTF8String], -1, &stmt, NULL) == SQLITE_OK) {
133
134         //查询数据
135         while (sqlite3_step(stmt) == SQLITE_ROW) {
136
137             /**
138              * 获取表数据的内容
139              * sqlite3_column_text(‘句柄‘,字段索引值。为char类型)
140              * sqlite3_column_int(int类型)
141              */
142
143             NSString *name    = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 1) encoding:NSUTF8StringEncoding];
144             int age           = sqlite3_column_int(stmt, 2);
145             NSString *address = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 3) encoding:NSUTF8StringEncoding];
146
147             NSLog(@"name:%@, age:%d, address:%@", name, age, address);
148
149         }
150
151     }
152
153 }
154
155 @end

3、用Xcode运行代码,会产生一个"personinfo.sqlite"的文件,根据路径找到这个文件:

4、用SQLiteManager工具打开"personinfo.sqlite"(没有安装就自己去网上下载)

现在我们可以看到表格已经创建好了。

5、在模拟器点击调用“增”的方法之后,再在SQLiteManager工具菜单点击左上角“Data”,再点击“personinfo”:

我们终于可以看到数据了。

6、其他的代码注释的都很清楚,按照方法做就行了。

sqlite3 语句总结

一、

sqlite3长用于 轻量级的 数据存储,象单片机这一类,但是现在的sqlite3,已经很先进,不能小看

二、

sqlite3常用命令
当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识:
#sqlite3 test.db
 
查看数据库文件信息命令(注意命令前带字符‘.‘):
sqlite>.database

查看所有表的创建语句:
sqlite>.schema
 
查看指定表的创建语句:
sqlite>.schema table_name
 
以sql语句的形式列出表内容:
sqlite>.dump table_name
 
设置显示信息的分隔符:
sqlite>.separator symble
Example:设置显示信息以‘:’分隔
sqlite>.separator :
 
设置显示模式:
sqlite>.mode mode_name
Example:默认为list,设置为column,其他模式可通过.help查看mode相关内容
sqlite>.mode column
 
输出帮助信息:
sqlite>.help
 
设置每一列的显示宽度:
sqlite>.width width_value
Example:设置宽度为2
sqlite>.width 2
 
列出当前显示格式的配置:
sqlite>.show
 
退出sqlite终端命令:
sqlite>.quit

sqlite>.exit
 
3、sqlite3指令
sql的指令格式:所有sql指令都是以分号(;)结尾,两个减号(--)则表示注释。
如:
sqlite>create studen_table(Stu_no interger PRIMARY KEY, Name text NOT NULL, Id interger UNIQUE, Age interger CHECK(Age>6), School text DEFAULT ‘xx小学);
该语句创建一个记录学生信息的数据表。
 
3.1 sqlite3存储数据的类型
NULL:标识一个NULL值
INTERGER:整数类型
REAL:浮点数
TEXT:字符串
BLOB:二进制数

3.2 sqlite3存储数据的约束条件
Sqlite常用约束条件如下:
PRIMARY KEY - 主键:
1)主键的值必须唯一,用于标识每一条记录,如学生的学号
2)主键同时也是一个索引,通过主键查找记录速度较快
3)主键如果是整数类型,该列的值可以自动增长
NOT NULL - 非空:
约束列记录不能为空,否则报错
UNIQUE - 唯一:
除主键外,约束其他列的数据的值唯一
CHECK - 条件检查:
约束该列的值必须符合条件才可存入
DEFAULT - 默认值:
列数据中的值基本都是一样的,这样的字段列可设为默认值

3.3 sqlite3常用指令
1)建立数据表
create table table_name(field1 type1, field2 type1, ...);
table_name是要创建数据表名称,fieldx是数据表内字段名称,typex则是字段类型。
例,建立一个简单的学生信息表,它包含学号与姓名等学生信息:
create table student_info(stu_no interger primary key, name text);

create table if not exists 表名(字段名1,字段名2...);

2)添加数据记录
insert into table_name(field1, field2, ...) values(val1, val2, ...);
valx为需要存入字段的值。
例,往学生信息表添加数据:
Insert into student_info(stu_no, name) values(0001, alex);
 
3)修改数据记录
update table_name set field1=val1, field2=val2 where expression;
where是sql语句中用于条件判断的命令,expression为判断表达式
例,修改学生信息表学号为0001的数据记录:
update student_info set stu_no=0001, name=hence where stu_no=0001;
 
4)删除数据记录
delete from table_name [where expression];
不加判断条件则清空表所有数据记录。
例,删除学生信息表学号为0001的数据记录:
delete from student_info where stu_no=0001;
 
5)查询数据记录
select指令基本格式:
select columns from table_name [where expression];
a查询输出所有数据记录
select * from table_name;
b限制输出数据记录数量
select * from table_name limit val;
c升序输出数据记录
select * from table_name order by field asc;
d降序输出数据记录
select * from table_name order by field desc;
e条件查询
select * from table_name where expression;
select * from table_name where field in (‘val1‘, ‘val2‘, ‘val3‘);
select * from table_name where field between val1 and val2;
f查询记录数目
select count (*) from table_name;
g区分列数据
select distinct field from table_name;
有一些字段的值可能会重复出现,distinct去掉重复项,将列中各字段值单个列出。
 
6)建立索引
当说数据表存在大量记录,索引有助于加快查找数据表速度。
create index index_name on table_name(field);
例,针对学生表stu_no字段,建立一个索引:
create index student_index on student_table(stu_no);
建立完成后,sqlite3在对该字段查询时,会自动使用该索引。
 
7)删除数据表或索引
drop table table_name;
drop index index_name;

时间: 2024-10-10 16:25:49

SQLite3的运用的相关文章

树莓派进阶之路 (028) - 树莓派SQLite3的安装

MySQL占用内存太大,而SQLite是一款轻量级零配置数据库,非常适合在树莓派和其他嵌入式系统中使用.SQLite文档详细资料丰富,本文不会详细解释SQLite数据库操作的方方面面,只能结合具体场景按需说明.本文介绍的SQLite技巧也可以在其他平台使用,并不局限于树莓派. 安装 SQLite 1 sudo apt-get update 2 sudo apt-get install sqlite sqlite3 3 #如果需要的话还可以顺便安装 PHP 相关组件 4 sudo apt-get

python安装sqlite3模块

Python安装sqlite3 环境为Ubuntu16.04 Apache2.4 Python2.7.13 django 1.8 今天部署apache+django,经过各种折腾,好不容易配置完了,发现错误Apache的日志里有一项 ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3 于是打开Python 测试

adb命令详解(二)——手机缺失sqlite3时操作数据库的多种解决方案

在android应用开发无处不在SQLite数据库的身影.那么在开发中怎么使用adb命令操作数据库的功能呢? 下面我们将完整的介绍与数据库操作相关的命令集及当手机缺少sqlite3的时候的多种解决方案. 1.当手机缺失sqlite3时,如何操作数据库 先来看看手机缺失sqlite3时候的效果图: 这个时候你想操作刚刚编写应用程序中执行的数据库文件内容,显然是执行不了sql语句的.下面我们将介绍三种方法让你可以查看应用程序下的数据库文件: ㈠向手机导入sqlite3文件 ①第一步,下载sqlite

sqlite3命令备忘录之查看表结构

Android内置了sqlite数据库,程序开发中经常使用到,已安装的程序,如何通过adb查看以创建的表结构呢? 在android下通过adb shell命令可以进入sqlite3的命令行client,见:在android命令行下使用sqlite3. 如果想列出该数据库中的所有表,可:.table 如果想查看这些表的结构:select * from sqlite_master where type="table"; 认情况下,不会出现红框中的表头,需要之前设置,命令为:.header

Cocos移植到Android的一些问题-SQLite3数据库移植问题

首选我们讨论一下SQLite3数据库移植问题.我们在第14章节介绍了在Win32平台使用SQLite3数据库,我们介绍了两种配置环境的方法:一种是使用Cocos2d-x提供的SQLite3库配置,另一种是从SQLite官网下载源代码拷贝的工程中.第一种方法配置起来比较麻烦,关键是Cocos2d-x提供的SQLite3库只是Win32没有其它平台的,目录结构如下所示.<游戏工程目录>\cocos2d\external\sqlite3│  Android.mk│├─include│      sq

python sqlite3使用详解

Python SQLITE数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身.它使用一个文件存储整个数据库,操 作十分方便.它的最大优点是使用方便,功能相比于其它大型数据库来说,确实有些差距.但是性能表现上,SQLITE并不逊色.麻雀虽小,五脏俱全, sqlite 实现了多数 sql-92 的标准,比如说 transaction . trigger 和复杂的查询等. python的数据库模块有统一的接口标准,所以数据库操作都有统一的模式,基本上都是

sqlite3常用命令以及django如何操作sqlite3数据库

一.如何进入sqlite3交互模式进行命令操作? 1.确认sqlite3是否已经安装 进去python命令行,执行 >>> import sqlite3 >>> 没有报错,说明sqlite3已经成功安装了 2.如何进入sqlite3命令行 sqlite3 /path/to/dbname 直接执行sqlite3 加数据库名即可  ~ sqlite3 ~/Downloads/django_test/cmdb/db.sqlite3  sqlite3SQLite version

SQLite3 笔记

SQLite insert 插入一行: 插入一组: 使用select结果插入 多行插入到新表: 多行插入到新表,一步到位: 非常有用的临时表: sqlite update 更新一条记录: update 注意 约束 sqlite delete 约束: 唯一约束unique autoincrement 主键约束 域约束:默认值 时间戳默认值 NOT NULL 约束 check 约束 check 约束 复杂 外键约束 SQLite  存储类 视图 索引 触发器 视图触发器:可更新的视图 事务 冲突 S

golang sqlite3 CRUD

pacakge mainimport ( "database/sql" "fmt" "log" _ "github.com/mattn/go-sqlite3" // sqlite3 dirver ) // People have database fields type People struct { id int name string age int } type appContext struct { db *sql.D

sqlite3数据库的简要应用

Sqlite3数据库升级方案的变化. 1,  若是讲要升级的数据库版本更高,则从低版本数据库中拷贝与新数据库相同字段的内容,其他字段按照默认值创建.A->B->C这样逐个版本升级,每个版本升级对应一段代码.若是升级到更低版本数据库,则将数据库全部删掉重建. 2,  直接比对当前运行的数据库版本,和将要升级的最新的数据库版本(A->C),把相同的字段保存下来,不同的字段直接按照默认值方式升级.这样可以来回升级,尽量保存了更多的字段的内容. //创建一个table表,在insert语句(按照