Chinaunix首页 | 论坛 | 博客
  • 博客访问: 351772
  • 博文数量: 73
  • 博客积分: 4096
  • 博客等级: 上校
  • 技术积分: 1102
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-21 14:53
文章分类
文章存档

2009年(3)

2008年(70)

我的朋友

分类: LINUX

2008-04-11 09:05:05

下载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数据库。



 

 

 

 

 


 
 
 
 
 
 
 
阅读(2919) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:提供cross-arm-extra.tar.gz下载

给主人留下些什么吧!~~