博客> SQLite3的基本使用
SQLite3的基本使用
2019-10-17 02:27 评论:0 阅读:575 xiaowoniupao

SQLite3简介

SQLite3只是一个轻型的嵌入式数据库引擎,占用资源非常低,处理速度比Mysql还快,专门用于移动设备上进行适量的数据存取,它只是一个文件,不需要服务器进程。

常用术语:表(table)、字段(column,列,属性)、记录(row,record)。

SQL语句

sql语句注意点: 1、不区分大小写 2、如果有多条sql语句必须以分号结尾 3、避免使用关键字命名字段 关键字:select、insert、update、delete、from、creat、where、desc、order、by、group、table、alter、view、index等,数据库中不能使用关键字命名表和字段。

数据定义语句(DDL:Data Definition Language) 1、表创建 创建表:create table if not exists TESTDB (ID integer primary key autoincrement,NAME varchar(32) not null,AGE integer default 10,PHONE varchar(32),ADCLASS integer); 语句结构 = create table + 表名 + (各列名称); 【注释】 (1)if not exists 表示如果不存在的话,同理if exists表示如果存在的话 (2)primary key 表示一个表的主键,该列任何两条记录不相同, 一张表中只能有一个主键 (3)unique 表示该列唯一,不能重复 (4)autoincrement 表示插入记录时,该列可以不赋值,自动增长 (5)not null 表示该列的值不能为空 (6)default 表示缺省值 【附】 integer 整型数据,4字节 bigint 整型数据,8字节 smallint 整型数据,2字节 tinyint 从0-255的整型数据,1字节 float 浮点型,4字节 double 浮点型,8字节 real 浮点型,8字节 char(n) n长度字串,n不能超过254 varchar(n) 长度不固定,但不能超过n的字串,n不能超过4000 (推荐使用) text 用于存储可变长度的非Unicode数据,存更大的数据 null 空值 blob 二进制对象 date 年月日 time 时分秒 datetime 年月日时分秒 (格式必须为2015-08-08, 不可以为2015-8-8) timestamp 年月日时分秒千分之一秒

2、数据库内容操作

数据库操作语言: SELECT - 从数据库表中获取数据【查】 UPDATE - 更新数据库表中的数据【改】 DELETE - 从数据库表中删除数据【删】 INSERT INTO - 向数据库表中插入数据【增】 插入语句: insert into ADSTUDENT (NAME,AGE,PHONE,ADCLASS) values ('小黑', 19, '1333333', 0); insert into ADSTUDENT (NAME,AGE) values ('小黑', 19); *insert into ADSTUDENT values ('小黑', 19);

插入语句结构 = insert into 表名 (列名) values (列值) 【注释】 (1)插入语句中也可以省略列名,省略列名时表示表中每一列都进行手动赋值

修改语句: update ADStudent set AGE=22 where NAME='小黑';

修改语句结构 = update 表名 set 列名1=列值1, 列名2=列值2 where 条件

删除语句: delete from TABLENAME where NAME='Hu' and HEIGHT=1.44;

删除语句结构 = delete from 表名 where 条件 【注释】 (1)省略删除语句的条件部分会将整张表内容全部删除,一定要注意使用

查询语句: select * from TABLENAME; // 查询所有 select NAME, AGE from TABLENAME; // 查询某几列 select NAME from TABLENAME where AGE=19; select distinct AGE from TABLENAME; // 查询结果中不会出现重复记录 select AGE from TABLENAME order by AGE desc; // 【排序】

查询语句结构 = select 列名(多列以英文逗号隔开) from 表名 【注释】 (1)‘*’ 表示全部 (2)distinct 表示将查询结果相同项合并,只获取不同结果 (3)where 表示过滤条件 where中可搭配的运算符,‘=’ ‘<>’ ‘>’ ‘<’ ‘>=’ ‘<=’ ‘()’, and, or, between and, in (‘a’, ‘c’)在之间 (4)order by 表示按照某一列排序, desc表示降序,asc表示升序

计算函数: select count(*) from TABLENAME; select avg(AGE) from TABLENAME; select max(HEIGHT) from TABLENAME; select min(HEIGHT) from TABLENAME; select sum(HEIGHT) from TABLENAME;

模糊查询: select NAME from TABLENAME where NAME like '%an%' like, not like 搭配 ‘xx%’, ‘%xx’, ‘%xx%’, ‘xx’, ‘xx’ 百分号可以代替一个或多个字符,下划线只能代替一个字符。

原生C语言操作数据库

【注】 1.数据库路径,如果没有该数据库文件,则要创建该数据库文件。 2.数据库使用前要进行【打开操作】,使用结束后要进行【关闭操作】。

// sqlite3, 成员变量/属性 sqlite3 *db = nil;

// 数据库路径
NSString * str = @"/Users/Naibin/Desktop/new.db";
// 如果不存在该数据库文件,则创建一个数据库文件
NSFileManager * manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:str] == NO) {
    [manager createFileAtPath:str contents:nil attributes:nil];
}
// 打开数据库
int res = sqlite3_open(str.UTF8String, &db);
if (res == SQLITE_OK) {
    NSLog(@"打开数据库成功");
}
// 创建表格
NSString * create = @"create table if not exists ADCLASS (ID integer primary key autoincrement, NAME varchar(32))";
int result = sqlite3_exec&#40;db, create.UTF8String, NULL, NULL, NULL&#41;;
if (result == SQLITE_OK) {
    NSLog(@"创建表格成功");
}else {
    NSLog(@"创建表格失败");
    return;
}
// 插入一条记录
NSString * insert = @"insert into ADCLASS values(1, 'test1')";
result = sqlite3_exec&#40;db, insert.UTF8String, NULL, NULL, NULL&#41;;
if (result == SQLITE_OK) {
    NSLog(@"插入信息成功");
}else {
    NSLog(@"插入信息失败");
    return;
}
// 查询操作
// 执行数据操作的过程中接收数据库记录描述的变量
sqlite3_stmt *stmt = nil;
NSString * select = @"select * from adclass";
result = sqlite3_prepare_v2(db, select.UTF8String, -1, &stmt, NULL);
if (result == SQLITE_OK) {
    //按条查询
    while (sqlite3_step(stmt) == SQLITE_ROW) {
        //取出name所在列的数据
        NSInteger ID = sqlite3_column_int(stmt, 0);
        char *nameS = (char *)sqlite3_column_text(stmt, 1);
        NSString *name = [NSString stringWithUTF8String:nameS];
        NSLog(@"id:%ld name:%@",ID, name);
    }
    sqlite3_finalize(stmt);//查询结束
}

// 更新操作 NSString * sql = @"update ADCLASS set NAME='test2' where NAME='test1'"; // 执行更新语句 sqlite3_exec(_sqlite, sql.UTF8String, NULL, NULL, NULL); // 关闭数据库 sqlite3_close(db);

总结

1.打开数据库

int sqlite3_open(

const char *filename,                              // 数据库的文件路径

sqlite3 **ppDb                                       // 数据库实例

);

2.执行任何SQL语句

int sqlite3_exec(

sqlite3*,                                                  // 一个打开的数据库实例 

const char *sql,                                       // 需要执行的SQL语句

int (*callback&#41;(void*,int,char**,char**),   // SQL语句执行完毕后的回调

void *,                                                   // 回调函数的第1个参数

char **errmsg                                        // 错误信息

);

3.检查SQL语句的合法性(查询前的准备)

int sqlite3_prepare_v2(

sqlite3 *db,                                           // 数据库实例

const char *zSql,                                   // 需要检查的SQL语句

  int nByte,                                            // SQL语句的最大字节长度

sqlite3_stmt **ppStmt,                          // sqlite3_stmt实例,用来获得数据库数据

const char **pzTail

);

4.查询一行数据

int sqlite3_step(sqlite3_stmt*); // 如果查询到一行数据,就会返回SQLITE_ROW

5.利用stmt获得某一字段的值(字段的下标从0开始)

double sqlite3_column_double(sqlite3_stmt*, int iCol); // 浮点数据

int sqlite3_column_int(sqlite3_stmt*, int iCol); // 整型数据

sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); // 长整型数据

const void sqlite3_column_blob(sqlite3_stmt, int iCol); // 二进制文本数据

const unsigned char sqlite3_column_text(sqlite3_stmt, int iCol); // 字符串数据

收藏
0
sina weixin mail 回到顶部