下载sqlite-3.5.4.tar.gz
#tar xzvf sqlite-3.5.4.tar.gz
#cd /mnt/sqlite-3.5.4
#./configure
#make
会出现关于tclsqlite.lo的错误
在configure中添加
--disable-tcl
结果还是出现这个错误,但是sqlite-3.5.4目录下已经生成可执行文件“sqlite3”
安装完成
#./sqlite3 foo.db 运行sqlite3,建立数据库名为foo.db,foo.db文件自动存放与目录sqlite-3.5.4下
进入sqlite3后,会出现一下文字:
SQLite version 3.5.4
Enter ".help" for instructions
sqlitr>
.help:求助
.quit:退出
所有SQL指令都是以分号(;)结尾的,如果遇到两个减号(--)则代表注解,sqlite3会略过去。
一,建立资料表
create table 的语法:
create table table_name(field1, field2, field3, ...);
table_name是资料表的名称,fieldx则是字段的名字。sqlite3与许多SQL数据库软件不同的是,它不在乎字段属于哪一种资料型态:sqlite3的字段可以储存任何东西:文字、数字、大量文字(blub),它会在适时自动转换。
如:
create table film(title, length, year, starring);
建立了一个名叫film的资料表,里面有name、length、year、starring四个字段。
二,建立索引
create index index_name on table_name(field_to_be_indexed);
意思是针对film资料表的name字段,建立一个名叫film_name_index的索引
一旦建立了索引,sqlite3会在针对该字段作查询时,自动使用该索引。这一切的操作都是在幕后自动发生的,无须使用者特别指令。
如:
create index film_title_index on film(title);
三,加入一笔资料
insert into table_name values(data1, data2, data3, ...);
如
:insert into film values ('Silence of the Lambs, The', 118, 1991, 'Jodie Foster');
insert into film values ('Contact', 153, 1997, 'Jodie Foster');
insert into film values ('Crouching Tiger, Hidden Dragon', 120, 2000, 'Yun-Fat Chow');
insert into film values ('Hours, The', 114, 2002, 'Nicole Kidman');
如果该字段没有资料,我们可以填NULL。
四,查询资料
查询资料
讲到这里,我们终于要开始介绍SQL最强大的select指令了。我们首先简单介绍select的基本句型:
select columns from table_name where expression;
最常见的用法,当然是倒出所有数据库的内容:
select * from film;
如果资料太多了,我们或许会想限制笔数:
select * from film limit 10;
或是照着电影年份来排列:
select * from film order by year limit 10;
或是年份比较近的电影先列出来:
select * from film order by year desc limit 10;
或是我们只想看电影名称跟年份:
select title, year from film order by year desc limit 10;
查所有茱蒂佛斯特演过的电影:
select * from film where starring='Jodie Foster';
查所有演员名字开头叫茱蒂的电影('%' 符号便是 SQL 的万用字符):
select * from film where starring like 'Jodie%';
查所有演员名字以茱蒂开头、年份晚于1985年、年份晚的优先列出、最多十笔,只列出电影名称和年份:
select title, year from film where starring like 'Jodie%' and year >= 1985 order by year desc limit 10;
有时候我们只想知道数据库一共有多少笔资料:
select count(*) from film;
有时候我们只想知道1985年以后的电影有几部:
select count(*) from film where year >= 1985;
(进一步的各种组合,要去看SQL专书,不过你大概已经知道SQL为什么这么流行了:这种语言允许你将各种查询条件组合在一起──而我们还没提到「跨数据库的联合查询」呢!)
五,如何更改或删除资料
例如有一笔资料的名字打错了:
update film set starring='Jodie Foster' where starring='Jodee Foster';
就会把主角字段里,被打成'Jodee Foster'的那笔(或多笔)资料,改回成Jodie Foster。
delete from film where year < 1970;
就会删除所有年代早于1970年(不含)的电影了。
六,其他sqlite的特别用法
sqlite可以在shell底下直接执行命令:
sqlite3 film.db "select * from film;"
输出 HTML 表格:
sqlite3 -html film.db "select * from film;"
将数据库「倒出来」:
sqlite3 film.db ".dump" > output.sql
利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库备份了):
sqlite3 film.db < output.sql
在大量插入资料时,你可能会需要先打这个指令:
begin;
插入完资料后要记得打这个指令,资料才会写进数据库中:
commit;
•QT的中文支持
•设定字库为GBK
/*main.cpp*/
•#include
•QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
•a.setDefaultCodec(QTextCodec::codecForName(“GBK”));
QT的中文支持主要为了解决从sqlite数据库读取数据,界面缺显示乱码的问题。
在界面的程序代码中,构造函数中,对界面的空间进行初始化,设定空间的显示字符为中文时,则使用下面的方法:
•tr(“中文”); 不行的话就用:trUtf8(“中文”);
而从QT界面读物控件的显示内容,并且将其写入数据库sqlite时,也遇到乱码的问题,解决方法是:用lineEdit控件来代替TextEdit控件就可以了。取lineEdit控件的内容时,用一个const char *str;来存放,因为空间的内容的一个常量。
•
QT界面对sqlite数据的具体操作方法:
从数据库读取数据:
•
char **azResult;
char *zErrMsg = 0;
int nrow=0;
int ncolumn=0;
sqlite3 *db=NULL; //定义一个数据库指针
•sqlite3_open(“foo.db”,&db); //打开数据库
•char *sql=“select Name from table_Name;”;
•Sqlite3_ get_table(db,sql,&azResult,&nrow,&ncolumn,&zErrMsg);
//功能:执行sql内容,对数据库进行操作。
//返回值:
azResult:读取的数据
nrow:读取的数据的行数
ncolumn:读取的数据的列数
•
•sqlite3_close(db); //关闭数据库
向数据库写数据:
•char sql[100]=“”;
•sprintf(sqll,”insert into table_Name values(%d,’%s’);”,*,*);
//sprintf相当于printf的功能,不同之处在于:printf的输出到终端,sprintf是输出到数组或变量中。但是此处应用,只能输出到数组中,下面的语句才能正常执行。
•char *
•
•sqlite3_exec(db,sqll,0,0,&zErrMsg);
//执行sqll数组的内容,对数据库进行操作。
sqlite3_close(db);
本人是做了个生化分析仪的人机界面。基于qt-embedded-free-3.1.1.tar.gz和sqlite-3.5.4-tar.gz数据库。
阅读(2984) | 评论(0) | 转发(0) |