SQLite一些技巧总结Word下载.docx
《SQLite一些技巧总结Word下载.docx》由会员分享,可在线阅读,更多相关《SQLite一些技巧总结Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
ret=sqlite3_get_table(db,"
selectcount(*)fromtable1wherefield=1"
&
dbresult,&
nrom,&
ncol,&
errmsg);
recordnum=atoi(dbresult[1]);
sqlite3_step后,如何知道查询返回的行数
sqlite3_prepare(db,"
select*fromlist;
-1,&
stat,0);
sqlite3_step(stat);
调用sqlite3_data_count(stat);
和sqlite3_column_count(stat);
返回的都是列数。
azResult是一个二级指针,它的值是有sqlite3_get_table()这个函数生成,我可以定义另外一个二级指针来保存这个值,不用的时候再调用sqlite3_free_table()来释放它。
SQLITE里查询日期与日期相减
selectdatetime('
2006-10-1700:
20:
00'
'
+1hour'
-12minute'
结果:
2006-10-1701:
08:
00
selectdate('
2006-10-17'
+1day'
+1year'
2007-10-18
创建了一个新表后,若没有数据,怎样得到表里的字段名啊?
你用
constchar*sqlite3_column_database_name(sqlite3_stmt*,int);
constvoid*sqlite3_column_database_name16(sqlite3_stmt*,int);
constchar*sqlite3_column_table_name(sqlite3_stmt*,int);
constvoid*sqlite3_column_table_name16(sqlite3_stmt*,int);
constchar*sqlite3_column_origin_name(sqlite3_stmt*,int);
constvoid*sqlite3_column_origin_name16(sqlite3_stmt*,int);
这个系列的函数就行,不然就从sqlite_master表中查一下
事务处理:
sqlite3_exec(db,"
BEGIN;
0,0,&
zErrMsg);
COMMIT;
intresult;
result=sqlite3_exec(db,"
begintransaction"
0,0,&
zErrorMsg);
//开始一个事务
committransaction"
//提交事务
rollbacktransaction"
//回滚事务
在SQLite中如果想处理时间的应该使用字段的默认值就可以了
CURRENT_TIMEwillgeneratethecurrentlocaltimeinANSI/ISOtimeformat
(HH:
MM:
SS).CURRENT_DATEwillgeneratethecurrentdate(inYYYY-MM-DDformat).CURRENT_TIMESTAMP
willproduceacombinationofthesetwo(inYYYY-MM-DDHH:
SSformat).Forexample:
CREATETABLEtimes(idint,
timeNOTNULLDEFAULTCURRENT_DATE
timeNOTNULLDEFAULTCURRENT_TIME,
timeNOTNULLDEFAULTCURRENT_TIMESTAMP);
INSERTINTOtimes
(1);
INSERTINTOtimes
(2);
SELECT*FROMStimes;
iddatetimetimestamp
------------------------------------------
12006-03-1523:
30:
252006-03-1523:
25
22006-03-1523:
402006-03-1523:
40
Thesedefaultscomeinquitehandyfortablesthatneedtologortimestampevents.
时间处理:
SELECT*FROMEIT_SCHEDULEWHERESERVICE_ID=?
ANDTS_ID=?
ANDON_ID
=?
ANDSTART_TIME_UTC_M=?
ANDSTART_TIME_UTC_L>
ORDERBYSTART_TIME_UTC_LLIMIT?
1
其中问号代表的值由sqlite3_bind_int()函数得到?
值传递是没有问题的。
就是结果变多了。
其中:
START_TIME_UTC_M表示的是当天日期
SQLiteDBMS
如果你有着方面的需求你可以去尝试一下SQLiteDBMS,它是一个韩国的开源项目,实现了C/S模式的SQLite支持。
具体特性如下:
TCP/IPServerdaemon
EmbeddedHTTPserver
HTTPrequest/XMLresponse
Preparedstatement
Multislavereplication
ManageExtendedSQL
Querycache
WebDAV
Monitoring
SecuritySSL
HTTPbaseauthentication
Tablelevelaccesscontrol
Library/Toolslibsqlited(C/C++)
SQLiteDBMSClient(GUI)
HTMLClient
datetime('
'
now'
)怎么显示当地时间?
呵呵!
我发现了:
localtime'
如何在VC下编译SQLITE
在projectsetting->
link
lib中加入sqlite3.lib
#include响应的头文件即可
Sqlite数据库学习例子,方便新人。
#include<
stddef.h>
stdlib.h>
stdio.h>
sqlite3.h>
staticint
callback(void*NotUsed,intargc,char**argv,char**azColName)
{
inti;
i<
argc;
i++){
if(argv[i]==NULL){
printf("
%s=NULL\n"
azColName[i]);
}else{
%s=%s\n"
azColName[i],argv[i]);
\n"
return(0);
int
main(intargc,char**argv)
sqlite3*db;
char*zErrMsg=0;
intrc;
if(argc!
=3){
fprintf(stderr,"
Usage:
%sDATABASESQL-STATEMENT\n"
argv[0]);
exit(EXIT_FAILURE);
rc=sqlite3_open(argv[1],&
db);
if(rc!
=SQLITE_OK){
Can'
topendatabase:
%s\n"
sqlite3_errmsg(db));
sqlite3_close(db);
rc=sqlite3_exec(db,argv[2],callback,0,&
SQLerror:
zErrMsg);
exit(EXIT_SUCCESS);
/*实用sqlite3_exec()的例子*/
string.h>
intrc,len,i,cols,type;
char*next;
sqlite3_stmt*st;
len=strlen(argv[2]);
rc=sqlite3_prepare(db,argv[2],len,&
st,&
next);
Erroronsqlite3_prepare:
for(;
;
){
rc=sqlite3_step(st);
if(rc==SQLITE_ROW){
cols=sqlite3_column_count(st);
cols;
type=sqlite3_column_type(st,i);
switch(type){
caseSQLITE_INTEGER:
%s[%d]=%d\n"
sqlite3_column_name(st,i),
i,sqlite3_column_int(st,i));
break;
caseSQLITE_FLOAT:
%s[%d]=%f\n"
i,sqlite3_column_double(st,i));
caseSQLITE_TEXT:
%s[%d]='
i,sqlite3_column_text(st,i));
caseSQLITE_BLOB:
%s[%d]=BLOB[%dbytes]\n"
sqlite3_column_name(st,i),
i,sqlite3_column_bytes(st,i));
caseSQLITE_NULL:
%s[%d]=NULL\n"
default:
UNDEFINEDColumn[%d]\n"
i);
}elseif(rc==SQLITE_DONE){
Erroronsqlite3_step:
rc=sqlite3_finalize(st);
Erroronsqlite3_finalize:
/*Anexampleusingwildcard&
bind*/
#defineBUF_LEN(1000)
#defineSQL_ST"
SELECT*FROMlistWHEREnameLIKE?
/*assumetheDBincludesatablenamed'
list'
consistsof'
name'
andetc.*/
char*next,buf[BUF_LEN];
=2){
%sDATABASE\n"
len=strlen(SQL_ST);
rc=sqlite3_prepare(db,SQL_ST,len,&
Pleaseinputnamepattern.\n"
if(fgets(buf,BUF_LEN,stdin)==NULL){
Somethingoccurredonstdin\n"
len=strlen(buf);
if(buf[len-1]=='
\n'
len--;
buf[len]='
\0'
rc=sqlite3_bind_text(st,1,buf,len,SQLITE_TRANSIENT);
Erroronsqlite3_bind_text:
/*InputdatafromCSVfile*/
/*Schema-CREATETABLElist(idINTEGERPRIMARYKEY,nameTEXT);
*/
/*CSV-``id,name'
#defineSQL_INSERT"
INSERTINTOlist(id,name)valueS(?
?
char*err_msg;
intid;
if(argc<
2){
%sdatabase\n"
rc=sqlite3_exec(db,"
BEGINTRANSACTION"
NULL,NULL,&
err_msg);
ErroronBEGINTRANSACTION:
err_msg);
len=strlen(SQL_INSERT);
rc=sqlite3_prepare(db,SQL_INSERT,len,&
sqlite3_errmsg(db)