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个函数产生的日期和时间进行格式化

用法实例:
1SELECT date('2011-9-9','+1 day','+1 year'); 结果是 2010-09-10
2SELECT datetime('now'); 当前日期和时间
3SELECT datetime('now', 'start of month'); 本月的第一天零点,也可以设置年和日的第一天
4SELECT 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";

 

posted on 2013-07-22 14:50  单行道的转角  阅读(3200)  评论(0编辑  收藏  举报

导航