SQLITE3 常用备注
打开数据库
1 #include "sqlite3.h" 2 char *szErrMsg= NULL; 3 char ** dbResult; 4 sqlite3 *db; 5 6 7 //打开数据库 8 //sqlite3_open("数据库路径UTF8") 9 //UTF16 10 int nResult = sqlite3_open16(L"t.db",&db); 11 //成功返回 SQLITE_OK 12 assert(nResult == SQLITE_OK);
密码设置
1 //如果数据库有密码,要验证密码 2 sqlite3_key(db,"",0); 3 //重新设置密码,需要打开并验证旧密码后 4 sqlite3_rekey(db,"123456",6);
查询
1 nResult = sqlite3_get_table( db, "select * from SensorData where sName like '%f''%' order by ID ASC limit 4,3", &dbResult, &nRow, &nColumn, &szErrMsg ); 2 if( SQLITE_OK == nResult ) 3 { 4 //查询成功 5 index = nColumn; //前面说过 dbResult 前面第一行数据是字段名称,从 nColumn 索引开始才是真正的数据 6 wcout<<L"查到记录"<<nRow<<endl; 7 for( int i = 0; i < nRow ; i++ ) 8 { 9 wcout<<i+1<<L"."<<endl; 10 for(int j = 0 ; j < nColumn; j++ ) 11 { 12 printf( "字段名:%s > 字段值:%s\n", dbResult[j] ,Unicode2Ansi(UTF82Unicode(dbResult[index]).c_str()).c_str()); 13 14 ++index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示 15 } 16 printf( "-------\n" ); 17 } 18 }else{ 19 printf("err:%s\n",szErrMsg); 20 }
limit nStart,nLimit //和MYSQL一致
单引号使用 2个单引号表示 'abc''asdf'
内存释放
1 sqlite3_free(szErrMsg);//安全 2 sqlite3_free_table(dbResult);//安全 3 sqlite3_close(db)//关闭
返回最后插入ID
1 sqlite3_last_insert_rowid()//sqlite_int64
特殊系统表
SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;
1 /*如,假设有一个 t1 表,其中有 "a", "b", "c" 三列, 如果要删除列 c ,以下过程描述如何做:*/ 2 BEGIN TRANSACTION; 3 CREATE TEMPORARY TABLE t1_backup(a,b); 4 INSERT INTO t1_backup SELECT a,b FROM t1; 5 DROP TABLE t1; 6 CREATE TABLE t1(a,b); 7 INSERT INTO t1 SELECT a,b FROM t1_backup; 8 DROP TABLE t1_backup; 9 COMMIT;
时间操作
/* sqlite时间格式2012-10-10 11:42:05 长度固定需要 0 填充*/ select CURRENT_TIMESTAMP /* UCT TIME*/ SELECT datetime(CURRENT_TIMESTAMP,'localtime') /*以下是sqlite下测试的输出信息:*/ select CURRENT_TIMESTAMP; /*2006-06-18 09:23:36*/ select datetime(CURRENT_TIMESTAMP,'localtime'); /* 2006-06-18 17:23:44*/ SELECT * FROM table1 WHERE julianday(date('now', 'localtime')) - julianday(date(arrival_date)) > 7 /*datetime date time 3个函数*/
sqlite3支持的函数 【1】日期函数 datetime() : 产生日期和时间 date(): 产生日期 time():产生时间 strftime():对以上3个函数产生的日期和时间进行格式化 用法实例: 1、SELECT date('2011-9-9','+1 day','+1 year'); 结果是 2010-09-10 2、SELECT datetime('now'); 当前日期和时间 3、SELECT datetime('now', 'start of month'); 本月的第一天零点,也可以设置年和日的第一天 4、SELECT datetime('now','+1 hour','-12 minute'); 当前时间加48分钟 strftime()函数可以将YYYY-MM-DD HH:MM:SS格式的日期字符串转换为其它形式的字符串 %d:天数,01-31 %f :小数形式的秒,SS.SSS %H:小时 %j :某一天是该年的第几天,001-366 %m:月份,00-12 %M:分钟,00-59 %s:从1970到现在的秒数 %S:秒,00-59 %w:星期,0-6,0是星期天 %W:某天是该年的第几周,01-53 %Y:年,YYYY %% 百分号 应用举例: SELECT strftime('%Y.%m.%d %H:%M:%S','now','localtime'); 二、【算术函数】 abs(X):返回绝对值 max(X,Y[,...]):返回最大值 min(X,Y,[,...]):返回最小值 random(*):返回随机数 round(X[,Y]): 四舍五入 三、【字符串处理函数】 length(x) :返回字符串字符个数 lower(x) :大写转小写 upper(x):小写转大写 substr(x,y,Z):截取子串 like(A,B):确定给定的字符串与指定的模式是否匹配 四、【条件判断函数、集合函数、其它函数】 typeof(x):返回数据的类型 last_insert_rowid():返回最后插入的数据的ID
PRAGMA encoding; PRAGMA encoding = "UTF-8"; PRAGMA encoding = "UTF-16"; PRAGMA encoding = "UTF-16le"; PRAGMA encoding = "UTF-16be";