sqlite查看所有表名及字段名,及判断是否存 sqlite3 判断表是否存在 和 获得表的所有列名
sqlite\u6570\u636e\u5e93 \u600e\u4e48\u67e5\u770b\u6240\u6709\u8868\u540dsqlite\u67e5\u770b\u6240\u6709\u8868\u540d\u53ca\u5b57\u6bb5\u540d
\u67e5\u8be2table\uff0ctype \u6bb5\u662f'table'\uff0cname\u6bb5\u662ftable\u7684\u540d\u5b57, so:
select name from sqlite_master where type='table' order by name;
\u67e5\u8be2indices\uff0ctype\u6bb5\u662f'index', name \u662findex\u7684\u540d\u5b57\uff0ctbl_name\u662findex\u6240\u62e5\u6709\u7684table\u7684\u540d\u5b57
\u901a\u8fc7\u4ee5\u4e0b\u8bed\u53e5\u53ef\u67e5\u8be2\u51fa\u67d0\u4e2a\u8868\u7684\u6240\u6709\u5b57\u6bb5\u4fe1\u606f
PRAGMA table_info([tablename])
01.#include
02.#include
03.#include "sqlite3.h"
04.#define _DEBUG_
05.int main( void )
06.{
07.sqlite3 *db=NULL;
08.char *zErrMsg = 0;
09.int rc;
10.rc = sqlite3_open("zieckey.db", &db); //\u6253\u5f00\u6307\u5b9a\u7684\u6570\u636e\u5e93\u6587\u4ef6,\u5982\u679c\u4e0d\u5b58\u5728\u5c06\u521b\u5efa\u4e00\u4e2a\u540c\u540d\u7684\u6570\u636e\u5e93\u6587\u4ef6
11.if( rc )
12.{
13. fprintf(stderr, "Can't open database: %s/n", sqlite3_errmsg(db));
14. sqlite3_close(db);
15. exit(1);
16.}
17.else printf("You have opened a sqlite3 database named zieckey.db successfully!/nCongratulations! Have fun ! ^-^ /n");
18.//\u521b\u5efa\u4e00\u4e2a\u8868,\u5982\u679c\u8be5\u8868\u5b58\u5728\uff0c\u5219\u4e0d\u521b\u5efa\uff0c\u5e76\u7ed9\u51fa\u63d0\u793a\u4fe1\u606f\uff0c\u5b58\u50a8\u5728 zErrMsg \u4e2d
19.char *sql = " CREATE TABLE SensorData( /
20. ID INTEGER PRIMARY KEY, /
21. SensorID INTEGER, /
22. SiteNum INTEGER, /
23. Time VARCHAR(12), /
24. SensorParameter REAL /
25. );" ;
26.sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
27.#ifdef _DEBUG_
28. printf("%s/n",zErrMsg);
29.#endif
1. 查询与判断表
查询sqlite中所有表,可用如下sql语句。原理是,sqlite中有一个内建表sqlite_master,这个表中存储这所有自建表的表名称等信息。
select name fromsqlite_master where type='table' order by name;
我们可以通过如下语句查看这个内建表的所有记录
select * fromsqlite_master;
由此可以进一步引申:判断指定的表是否存在,可以用如下语句:
selectcount(*) from sqlite_master wheretype='table' and name = 'yourtablename';
其中yourtablename表示你要判断的表名,如果查询结果大于0,表示该表存在于数据库中,否则不存在。
2. 查询与判断列
通过以下语句可查询出某个表的所有字段信息
PRAGMA table_info([tablename])
比如:我想查看表catalog的所有列信息,可以用下述代码,结果如图所示:
PRAGMA table_info(catalog)
3. Sqlite中新增、删除、重命名列
3.1 新增一列
方法:使用sql命令
命令:ALTER TABLE table-name ADD COLUMN column-namecolumn-type
例如:在student表中添加一列名为name,类型为varchar:
alter table student add column name varchar;
alter table catalog add column xxx1 char(20) default '';
3.2 删除一列
方法:由于drop命令在sqlite中不可用于删除列,
alter table student drop column name // 该行在SQlite中不能用,SQlite不支持drop
可采用如下思路,类似于swap()函数的过程。
比如我有表A,A中有x、y、z三列。我要将表A中的x列删掉。那么,
第1步,新建一个表B,B中含有y、z两个字段,且类型与A中的y、z类型相同。
第2步,将A中的所有y、z两列的值拷贝到B中。
上面两步使用一句命令即可完成
create table B asselect y,z from A
注意,如果A中y的类型为char,则上面create命令会在B中创建类型为TEXT的y列。即char类型会被改变。
第3步,将A表删除
drop table ifexists A
第4步,将B重命名为A
alter table Brename to A
3.3 重命名一列
方法:与删除一列相同,在sqlite中alter同样无法重命名一列。如果想重命名,那么思路与删除一列相同。
4. Sqlite中新增、删除、重命名表
Sql语句在3.2中已有。整理如下。
4.1 新增表
create table A(id char(20),channeltext,name text,primary key (id))
create table B as select y,z from A
4.2 删除表
drop table if exists A
4.3 重命名表
alter table B rename to A
绛旓細3銆佸弻鍑“Test”鏁版嵁搴擄紝灏嗕細鏄剧ず鍏朵笅鐨勫瓙鑺傜偣锛岄夋嫨“Tables”锛屽苟鍦ㄥ伐鍏锋爮鐐瑰嚮“鏂板缓琛”鎸夐挳锛4銆佸湪Table name鏂囨湰妗嗗唴杈撳叆琛ㄥ悕Info锛屽苟鐐瑰嚮“Add columns(Ins)”鍥炬爣浠ヤ究娣诲姞鍒楋紱5銆佹坊鍔犵涓涓瓧娈碉紝瀛楁鍚涓篒D锛屾暟鎹被鍨嬩负Text锛屽皢涓婚敭鍓嶇殑澶嶉夋...
绛旓細浣犺繖绉嶅叏瀛楁鍖归厤鏌ヨ涓嶈兘杩欎箞鍐欑殑锛岃繖绉嶆煡璇㈠彨鍏ㄦ枃妫绱紝sqlite鏈夌幇鎴愮殑鍏ㄦ枃妫绱㈡柟妗堬紝闇瑕佸湪sqlite涓婂仛浜涢厤缃 瀹樻柟鏂囨。涓婃湁鍐欑殑 http://www.sqlite.org/fts3.html
绛旓細tbl_name TEXT,rootpage INTEGER,sql TEXT );瀵逛簬琛ㄦ潵璇达紝type 瀛楁姘歌繙鏄 鈥榯able鈥欙紝name 瀛楁姘歌繙鏄琛ㄧ殑鍚嶅瓧銆傛墍浠ワ紝瑕佽幏寰楁暟鎹簱涓鎵鏈夎〃鐨勫垪琛紝 浣跨敤涓嬪垪SELECT璇彞锛歋ELECT name FROM sqlite_master WHERE type=鈥檛able鈥橭RDER BY name;瀵逛簬绱㈠紩锛宼ype 绛変簬 鈥榠ndex鈥, name 鍒欐槸绱㈠紩鐨勫悕瀛楋紝...
绛旓細db_xxx涓嬬殑field_yyy瀛楁涓烘棩鏈熷瀷瀛楁 select * from db_xxx where substr(date(field_yyy),1,7) = '2012-07';
绛旓細Sqlite涓垽鏂〃銆瀛楁鏄惁瀛樺湪銆SQLite搴撳寘鍚竴涓鍚嶅瓧鍙仛sqlite3鐨勫懡浠よ,瀹冨彲浠ヨ鐢ㄦ埛鎵嬪伐杈撳叆骞舵墽琛岄潰鍚慡QLite鏁版嵁搴撶殑SQL鍛戒护銆係QLite锛歋QLite锛屾槸涓娆捐交鍨嬬殑鏁版嵁搴擄紝鏄伒瀹圓CID鐨勫叧绯诲瀷鏁版嵁搴撶鐞嗙郴缁燂紝瀹冨寘鍚湪涓涓浉瀵瑰皬鐨凜搴撲腑銆傚畠鏄疍.RichardHipp寤虹珛鐨勫叕鏈夐鍩熼」鐩傚畠鐨勮璁$洰鏍囨槸宓屽叆寮忕殑锛岃屼笖...
绛旓細NANE銆傚湪sqlite3鏁版嵁搴撲腑锛孨ANE瀛楁鏄鏌ヨ鍚嶅瓧鐨勫叧閿瓧娈碉紝浣跨敤璇ュ瓧娈靛彲浠ュ嚭鐜板悓鍚嶅悓濮撶殑浜虹殑缁撴灉銆傝鍥撅紙View锛夊疄闄呬笂鏄竴涓互棰勫畾涔夌殑SQLite鏌ヨ褰㈠紡瀛樺湪鐨勮〃鐨勭粍鍚堬紝鍙互鍖呭惈涓涓〃鐨鎵鏈琛屾垨浠庝竴涓垨澶氫釜琛ㄩ夊畾琛屻
绛旓細sqlite鏌ヨ鏁版嵁琛ㄦ煇涓涓瀛楁鐨勭害鏉熸潯浠禢ULL鍊笺係QLite绾︽潫涔婲OTNULL纭繚鏌愬垪涓嶈兘鏈塏ULL鍊笺傞粯璁ゆ儏鍐典笅锛屽垪鍙互淇濆瓨NULL鍊笺傚鏋滄偍涓嶆兂鏌愬垪鏈塏ULL鍊硷紝閭d箞闇瑕佸湪璇ュ垪涓婂畾涔夋绾︽潫锛屾寚瀹氬湪璇ュ垪涓婁笉鍏佽NULL鍊笺
绛旓細SELECT * FROM ROLE WHERE SUBSTR(CARSTYLE, -1) = 1
绛旓細TEMPORARY琛ㄧ粨鏋勮瀛樺偍鍦ㄥ彟澶栦竴涓悕鍙"sqlite_temp_master"鐨勭壒瀹氱殑琛ㄤ腑銆"sqlite_temp_master"琛ㄦ槸涓存椂琛ㄨ嚜韬 sqlite3鐨勭壒娈婂懡浠 澶у鏁板,sqlite3璇诲叆杈撳叆琛,骞舵妸瀹冧滑浼犻掑埌SQLite搴撲腑鍘昏繍琛屻備絾鏄鏋滆緭鍏ヨ浠ヤ竴涓偣(鈥.鈥)寮濮,閭d箞杩欒灏嗚sqlite3绋嬪簭鑷繁鎴彇骞惰В閲娿傝繖浜涒滅偣鍛戒护鈥濋氬父琚敤鏉ユ敼鍙鏌ヨ...
绛旓細寰堢畝鍗曪紝浣犲彲浠ュ涓嬮潰鐨勫叾涓竴绉嶆柟娉曟潵鑾峰彇锛歋tring id = cursor.getString( cursor.getColumnIndex("id") ); // id is column name in db 鎴栬匰tring id = cursor.getString( cursor.getColumnIndex(0)); // id is first column in db ...