sqlite 基本操作 全
sqlite3本地数据库学习
sqlite3只是一个轻型的嵌入式数据库引擎,占用资源非常低,处理速度比mysql还快,专门用于移动设备上进行适量的数据存取,它只是个文件,不需要服务器进程。
常用术语:表(table)、字段(colum,列,属性)、记录(row,record)
关键字:select、insert、updete、delete、from、creat、where、desc、order、by、group、table、alter、view、index等。
1、安装sqlite3
sudo()apt-get()install()sqlite3
2、存储类型
integer 整型:int,shoert,long
text 文本字符串:string
real 浮点型:float,double
blob 二进制
3、字段结束
not null:字段的值不能为空
unique:字段的值必须是唯一的
default:指定字段的默认值
primarykey:主键,用来唯一的标识某条记录,相当于记录的身份证。主键可以是一个或多个字段,应由计算机自动生成和管理。主键字段默认包含了not null和unique两个约束。
autoincrement:当主键是integer类型时,应该增加autoincrement约束,能实现主键值的自动增长。
外键:利用外键可以用来建立表与表之间的联系,一般是一张表的某个字段,引用着另一张表的主键。
4、创建数据库usr.db在当前目录下
sqlite3()usr.db
5、创建表格,表格内容以树状存储
create()table()表名(字段名1()字段类型1,字段名2()字段类型2...)
6、数据库中不能使用关键字命名表和字段,不区分大小写,每条语句后加";"结尾
7、删除表格
drop()table()表名
8、向表格里添加数据
insert()into()表名(字段1,字段2...)values(字段1的值,字段2的值...)
8、修改表中的数据
updata()表名()set()字段1=字段1的值,字段2=字段2的值...
//将字段为name全部修改成'Tom'
updata()stu()set()name='Tom';
//将字段为id=1001的字段name修改成'Tom'
updata()stu()set()name='Tom'()where()id=1001;
//将字段为id=1001同时字段name='lisi'的字段name修改成'Tom'
updata()stu()set()name='Tom'()where()id=1001()and()name='lisi';
9、删除表中的数据
//删除整个表格
delete()from()表名
//将字段id=1001同时字段name='lisi'这个数据从表中删除
delete()from()表名()where()id=1001()and()name='lisi';
10、查询表格里某个内容
select()字段1()字段2...from()表名()where()字段=某值
//查询字段name='lisi'的字段id的值
select()id()from()stu()where()name='lisi';
//查询表格内所有字段的内容
select()id()*from()stu;
11、计算记录条数
select()count()字段;
select()count()*from()表名;
12、where用法
where()字段=某值;
where()字段!=某值;
where()字段>某值;
where()字段1=某值1()and()字段2<某值2;
where()字段1=某值1()or()字段2>某值2;
13、order()by用法
select()*from()表名()order()by()字段(默认升序);
select()*from()表名()order()by()字段()desc(降序);
select()*from()表名()order()by()字段()asc(升序);
select()*from()表名()order()by()字段1()asc(先按字段1升序),字段2()desc(再按字段2降序);
14、limit用法
//分页查询,数值1表示跳过前面多少条,数值2表示取出之后多少条
select()*from()表名()limit()数值1,数值2;
//跳过前面0条,相当于select()*from()表名()limit()0,数值2;表示前面多少条数据。
select()*from()表名()limit()数值2;
15、like用法,模糊查询
select()字段1,字段2...from()表名()where()字段()like()%某值%;
二、函数
1、打开数据库
int sqlite3_open(const char *filename,sqlite3 **ppDb);
const char *filename:数据库文件路径
如,E:/test.db。文件名存在,就把它当数据库文件打开,如果文件不存在,sqlite会自动建立它。
sqlite3 **ppDb:数据库实例
函数返回值:
SQLITE_OK:表示操作正常,其sqlite3.h宏在中有定义
2、关闭数据库链接
int sqlite3_close(sqlite3 *ppDb);
sqlite3 *ppDb:是sqlite3_open打开的数据库链接
3、执行任何sql语句
int sqlite3_exec(sqlite3 *ppDb,const char *sql,int (*callback)(void *,int,char **,char **));
sqlite3 *:一个打开的数据实例
const char *sql:是1条需要执行的sql语句,以\0结尾。
int (*callback)(void *,int,char **,char **):
sql语句执行完毕后的回调,当这条语句执行之后,sqlite3会去调用用户提供的
这个函数。
void *:是用户提供的指针,用户可以传递任何一个指针参数到这里,这个
参数最终会传到回调函数里,如果不需要传递指针到回调函数里,可以填null。
char **errmsg:错误信息,注意是指针。sqlite3里面有很多固定的错误信息,
执行sqlite3_exec之后,执行失败时可以查阅这个指针(cout< 符串信息,这串信息告诉你错在什么地方。sqlite3_exec函数通过修改永辉穿日 的指针的指针,把你提供的指针指向错误提示信息,这样sqlite3_exec函数外面 就可以通过char *得到具体错误提示。) 说明: 1.通常,sqlite3_callback和它后面的void *这两个位置都可以填null。表示不 需要回调。 如,做insert操作时,就要使用回调,因为sqlite3把数据查出来,得通过回调告 诉你查出了什么数据。 2.exec的回调函数 typedef int(* sqlite3_callback)(void *,int,char **,char **); 用户的回调函数必须定义成上面这个函数的类型。 例子: //sqlite3的回调函数 //sqlite3每查到一条记录,就调用一次这个回调 int Loadmayinfo(void *para,int n_column,char **column_value,char **column_name); //para是用户在sqlite3_exec里传入的void *参数通过para参数,用户可以传 入一些特殊的指针(如,类指针、结构体指针)。然后在这里面强制转换成对用的 类型(这里面是void *类型,必须强制转换成用户的类型才可以)。然后操作这些 数据。 //n_column是一条记录有多少个字段(即这条记录有多少列)。 //char **column_value是一个关键字,查出来的数据都存在这里,它实际是 一维数组(不是二维数组)。 //每个元素都是一个char *值,是一个字段内容(用字符串来表示,以\0结尾)。 //char **column_name跟column_value是对应的,这里表示字段的字段名称。 4、查询sql语句的合法性(查询前的准备) int sqlite3_prepare_v2(sqlite3 *db,const char *zSql,int nByte,sqlite3_stmt **ppStmt,const char **pzTail); sqlite3 *db:数据库实例 const char *zSql:需要检查的sql语句 int nByte:Ssql语句的最大字节长度 sqlite3_stmt **ppStmt:sqlite3_stmt实例,用来获取数据库数据 5、查询1行数据 int sqlite3_step(sqlite3_stmt *); 如果查询到1行数据,就会返回SQLITE_ROW 6、利用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);//字符串数据 三、配置sqlite3 1、双击sqlite-amalgamation-3210000压缩包,提取到一个自定义文件夹里 2、有shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h,4个文件 3、创建动态库,将sqlite3.c编译成libsqlite.so文件 g++()-o()libsqlite.so()-fPIC()--shared()sqlite3.c 4、创建静态库, 将sqlite3.c编译成目标文件sqlite3.o gcc()-()sqlite3.c()-o()sqlite3.o 生成静态库 ar()-r()sqlite3.a()sqlite.o 5、以上步骤完成后,新建.cpp文件,将libsqlite.so、sqlite3.c、sqlite3.h、sqlite3.a、sqlite3.o拉入当前工程目录下即可 6、编译 a、链接静态库 g++()自定义文件.cpp()sqlite3.a()-lpthread()-ldl b、链接动态库 g++()自定义文件.cpp()-L()./()-lsqlite()-lpthread()-ldl 如果编译链接动态库时,找不到动态库可以cp()libsqlite.so()/lib /*******************************************/ 库通俗的说就是把这些常用函数的目标文件打包在一起,提供相应函数的接口,便于程序员使用 在windows中有 静态库是以.lib为后缀的文件 共享库是以.dll为后缀的文件 在linux中 静态库是以.a为后缀的文件 共享库是以.so为后缀的文件 /*******************************************/ 1、当编译链接静态库时,库中目标文件所包含的所有将被程序使用的函数的机器码被copy盗最终的可执行文件中。 优点:导致最终生成的代码量相对变多,相当于编译器将代码补充完整了,这样运行起来相对就快些。 缺点:占用磁盘和内存空间,静态库会被添加到和它连接的每个程序中,而且这些程序运行时会加载到内存中,无形中又多消耗了更多的内存空间 2、当编译链接动态库时,可执行文件只包含它需要的函数的引用表,而不是所有函数代码,只有在程序执行时,那些不要的函数代码才被拷贝到内存中。 优点:可执行文件较小,节省磁盘空间,更进一步,操作系统使用虚拟内存,使得一份动态库(共享库)驻留在内存中被多个程序使用,也用时节省内存。 缺点:在运行时,需要连接库,会费一定时间,执行速度对慢一些。 3、总结:静态库是牺牲空间效率,换取了时间效率;动态库(共享库)牺牲时间效率换取空间效率。没有好坏之分,看具体需要。 /*******************************************/ 在linux下 静态库: 首先将源文件编译成目标文件: gcc()-c()a.c()b.c 生成静态库: ar()-rc()libstatic.a()a.o()b.o 共享库: 首先将源文件编译成目标文件: gcc()-c()a.c()b.c 生成共享库: gcc()-fPIC()-shared()-o()libshared.so()a.o()b.o 编译: 链接静态库:(默认库在当前文件夹) gcc()-o()staticcode()-L().()-lstaict()main.c()-static 链接共享库:(默认库在当前文件夹) gcc()-o()sharedcode()-L().()-lshared()main.c https://www.360docs.net/doc/0f15822069.html,/linchunhua/article/details/7184439 sqlite数据库只用一个文件就ok,小巧方便,所以是一个非常不错的嵌入式数据库,SQLite 大量的被用于手机,PDA,MP3播放器以及机顶盒设备。 Mozilla Firefox使用SQLite作为数据库。 Mac计算机中的包含了多份SQLite的拷贝,用于不同的应用。 PHP将SQLite作为内置的数据库。 Skype客户端软件在内部使用SQLite。 SymbianOS(智能手机操作平台的领航)内置SQLite。 AOL邮件客户端绑定了SQLite。 Solaris 10在启动过程中需要使用SQLite。 McAfee杀毒软件使用SQLite。 iPhones使用SQLite。 Symbian和Apple以外的很多手机生产厂商使用SQLite。 下面就sqlite中的常用命令和语法介绍 https://www.360docs.net/doc/0f15822069.html,/download.html可下载不同操作系统的相关版本sqlite gedit 也可以使用火狐中的插件sqlite manager 新建数据库 sqlite3 databasefilename 检查databasefilename是否存在,如果不存在就创建并进入数据库(如果直接退出,数据库文件不会创建)如果已经存在直接进入数据库对数据库进行操作 sqlite中命令: 以.开头,大小写敏感(数据库对象名称是大小写不敏感的) .exit .help 查看帮助针对命令 .database 显示数据库信息;包含当前数据库的位置 .tables 或者.table 显示表名称没有表则不显示 .schema 命令可以查看创建数据对象时的SQL命令; .schema databaseobjectname查看创建该数据库对象时的SQL的命令;如果没有这个数据库对象就不显示内容,不会有错误提示 .read FILENAME 执行指定文件中的SQL语句 .headers on/off 显示表头默认off .mode list|column|insert|line|tabs|tcl|csv 改变输出格式,具体如下 sqlite> .mode list sqlite> select * from emp; 7369|SMITH|CLERK|7902|17-12-1980|800||20 7499|ALLEN|SALESMAN|7698|20-02-1981|1600|300|30 如果字段值为NULL 默认不显示也就是显示空字符串 Sqlite3教程 一、基本命令 1、进入命令行环境: 显示版本号,并告诉每一条SQL语句必须用分号;结尾2、命令行帮助: 3、退出命令行环境 或者 二、数据库相关命令 1、创建(或打开)一个新的数据库:文件名 若文件存在,刚打开该文件;若文件不存在,则创建一个*.db数据库文件。 导入SQL语句文件。 、列出所有数据表: 4、显示数据库结构: 用一些SQL语句描述数据库的结构。 5、显示表的结构:表名 6、导入数据:文件名表名 若导入csv文件,设置分隔符为逗号。 、导出数据:文件名 查询结果默认在终端显示,查询表格结构,语句查询表格数据。设置查询目标后,查询结果显示在设置的文件中 文件名 然后输入sql查询语句,查询的结果显示在设置的文件中,不在终端显示 运行恢复导出到终端(标准输出)。 导出数据到excle表格中 设置分隔符为逗号: 设置导出文件名,后缀为csv: 查询语句:表名 三、数据显示命令 运行表名,显示全表的内容 1.设置分隔符:分隔符 默认分隔符是“|”。 2.设置显示模式:模式 默认的是list显示模式,一般使用column模式。 3.显示标题栏: 4.设置每一列的显示宽度: 5.列出当前显示格式设置情况: 四、数据库基本操作 1.数据库定义语言DDL 在关系型数据库中,数据库中的表table、视图、索引、关系和触发器等等,构成了数据库的架构。在SQL语句中,专门有一些语句用来定义数据库架构,这些语句被称为“数据库定义语言”,即DDL。 SQLite数据库引擎支持下列三种DDL语句: ●CREATE:创建 ●ALTER TABLE:改变表的结构 ●DROP:删除 数据库的操作 我们在这个项目中使用的是SQLITE3数据库软件。 通过使用SQLITE3进行创建数据库,创建表,插入记录,查询记录,更新记录,关闭数据库等操作来实现将相应的数据存入数据库中。 1.打开数据库,创建表 1.1sqlite*db;定义一个sqlite*的变量 sqlite3_open(“./link.db”,&db); 在当前目录下打开一个名为link.db的数据库,若是没有则在当前目录下创建一个名为link.db 的数据库。 1.2sql="create table weblink(id integer primary key,domain text,page text,fromdomain text,status integer);" 在已打开的数据库中创建一个名weblink的表。表的属性如下: id integer primary key:ID号(表中黙认包含的) domain text:域名 page text:子网页 fromdomain text:源域名 status integer:状态标志 1.3sqlite3_exec(db,sql,NULL,NULL,NULL); 执行一条sql语句的函数。 函数原型:int sqlite3_exec(sqlite3*,const char*sql,sqlite3_callback,void*,char**errmsg) 第1个参数是前面open函数得到的指针。说了是关键数据结构。 第2个参数const char*sql是一条sql语句,以\0结尾。 第3个参数sqlite3_callback是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。(什么是回调函数,自己找别的资料学习) 第4个参数void*是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。等下我们再看回调函数的写法,以及这个参数的使用。 第5个参数char**errmsg是错误信息。注意是指针的指针。sqlite3里面有很多固定的错误信息。执行sqlite3_exec之后,执行失败时可以查阅这个指针(直接printf(“%s\n”,errmsg))得到一串字符串信息,这串信息告诉你错在什么地方。sqlite3_exec函数通过修改你传入的指针的指针,把你提供的指针指向错误提示信息,这样sqlite3_exec函数外面就可以通过这个char*得到具体错误提示。 说明:通常,sqlite3_callback和它后面的void*这两个位置都可以填NULL。填NULL表 sqlite3本地数据库学习 sqlite3只是一个轻型的嵌入式数据库引擎,占用资源非常低,处理速度比mysql还快,专门用于移动设备上进行适量的数据存取,它只是个文件,不需要服务器进程。 常用术语:表(table)、字段(colum,列,属性)、记录(row,record) 关键字:select、insert、updete、delete、from、creat、where、desc、order、by、group、table、alter、view、index等。 1、安装sqlite3 sudo()apt-get()install()sqlite3 2、存储类型 integer 整型:int,shoert,long text 文本字符串:string real 浮点型:float,double blob 二进制 3、字段结束 not null:字段的值不能为空 unique:字段的值必须是唯一的 default:指定字段的默认值 primarykey:主键,用来唯一的标识某条记录,相当于记录的身份证。主键可以是一个或多个字段,应由计算机自动生成和管理。主键字段默认包含了not null和unique两个约束。 autoincrement:当主键是integer类型时,应该增加autoincrement约束,能实现主键值的自动增长。 外键:利用外键可以用来建立表与表之间的联系,一般是一张表的某个字段,引用着另一张表的主键。 4、创建数据库usr.db在当前目录下 sqlite3()usr.db 5、创建表格,表格内容以树状存储 create()table()表名(字段名1()字段类型1,字段名2()字段类型2...) 6、数据库中不能使用关键字命名表和字段,不区分大小写,每条语句后加";"结尾 7、删除表格 drop()table()表名 8、向表格里添加数据 insert()into()表名(字段1,字段2...)values(字段1的值,字段2的值...) 8、修改表中的数据 updata()表名()set()字段1=字段1的值,字段2=字段2的值... //将字段为name全部修改成'Tom' updata()stu()set()name='Tom'; //将字段为id=1001的字段name修改成'Tom' updata()stu()set()name='Tom'()where()id=1001; //将字段为id=1001同时字段name='lisi'的字段name修改成'Tom' updata()stu()set()name='Tom'()where()id=1001()and()name='lisi'; 9、删除表中的数据 这里我们只是演示了一下使用这个框架完成最简单的程序的过程,只起到抛砖引玉的作用。这个框架很复杂,但是功能也很强大,Qt Creator中自带了几个相关的例子(在帮助中查找Graphics View Examples即可),你可以参考一下。因为篇幅问题,我们就只讲这么多,如果以后有机会,我会推出一个相关的专题来讲述这个框架。 分类:Qt系列教程作者: yafeilinux 日期:四月 30th, 2010. 3,006 views Tags: 2D绘图, creator, qt, yafeilinux, 教程 二十一、Qt数据库(一)简介 本文章原创于https://www.360docs.net/doc/0f15822069.html,转载请注明出处。 从今天开始我们学习Qt数据库编程的内容。 先说明:我们以后使用现在最新的基于Qt 4.6.2的Qt Creator 1.3.1 Windows版本,该版本是2010年2月17日发布的。 数据库几乎是每个较大的软件所必须应用的,而在Qt中也使用QtSql模块实现了对数据库的完美支持。我们在Qt Creator的帮助中查找QtSql Module,其内容如下图: 可以看到这个模块是一组类的集合,使用这个模块我们需要加入头文件#include SQLite数据库的基本操作 main.xml(主布局) android:orientation="vertical"> sqlite3常用命令及语法
sqlite3使用教程
SQLITE3的操作方法及应用
sqlite 基本操作 全
QSQLite 数据库
SQLITE最基本操作