在SQL Server中,创建表格的时候,对于时间列有时候我们可以根据需要指定默认值为当前时间(也就是说记录生成的时候有默认的时间戳)。例如:
create table log(
content varchar(256),
logtime datetime default getdate()
)
然而在Sqlite中如何实现呢?查文档得知Sqlite中并没有getdate()函数,但其系统内置函数有datetime(),因此能不能按照下面的写法实现默认时间戳呢:
create table log(
content varchar(256),
logtime datetime default datetime('now')
)
答案是否定的,会提示语法错误。那么应该如何声明呢?如下所示:
create table log(
content varchar(256),
logtime TIMESTAMP default CURRENT_TIMESTAMP
)
这个可以达到效果,但是默认的时间是以格林尼治标准时间为基准的,因此在中国使用的话会正好早8个小时。为了解决这个问题,我们可以这样声明:
create table log(
co ......
1.在SQLite中插入当前时间,变量定义不用多说
char *sql = sqlite3_mprintf("insert into Log VALUES(datetime('now', 'localtime'), '%q', '%q')", cUser, cLogContent);
int ret = sqlite3_exec(Sqlite3, sql, NULL, NULL, &pErrMsg);
以月份为单位统计出符合当前月份的记录, Time为数据库中字段名:
char *sql = sqlite3_mprintf("select * from Log where Time>=datetime('now','start of month') order by Time DESC");
sqlite3_prepare(sqlite3_db, sql, -1, &pStmt, &pzTail);
int ret = sqlite3_step(pStmt);
while (ret == SQLITE_ROW)
{
...
ret = sqlite3_step(pStmt);
}
以时间段来查询,界面提示的时间为YYYY-MM-DD格式,cStartTime, cEndTime为char *储存的是时间YYYY-MM-DD:
char *sql = sqlite3_mprintf("select * from Log where Time between datetime('%q','start of day') and datetime('%q','start of
day','+1 day') order by Time DESC", cStartTime, cEndTime);
sqlite3_prepare(sqlite3_db, sql, -1, &pStmt, &pzTail);
int ret = sqlite3_step(pStmt);
while (ret == ......
拜Google的Scott Hess同志所赐,SQLite也推出了全文搜索功能。
SQLite通过建立一个虚拟表,将输入的文字根据空格、标点符合等规则进行分词,组织成一棵B树,以此来提高搜索速度。
如何使用这一功能,性能上如何,大家各自研究去吧。
在这里我就汇报一下自己的研究成果:
1. SQLite的全文搜索大致是按照空格分词出一个个的单词,如果文章中有“asdf”这样一个词,那么,你就休想通过“sd”来找到这段内容了,因为他是以单词作为一个单位来组织的;
2. 既然是空格分词,自然就不支持中文了,除非你是把一个文章每个词都用空格或者标点符号分开;
3. SQLite提供了可自定义的词法分析器,具体的用法看文档;
4. 研究下porter这一语法分析器,参看源码文件“fts3_porter.c”,对于一个单词的多种词形,按照英文的基本规范,将多个词形统一为一个基本单词,具备了一定语义上的支持。
总结来说,目前是没有提供真正语义上的分词,这就要靠各位看官多多努力了,呵呵
官网关于全文搜索的链接:http://www.sqlite.org/fts3 ......
OS X自从10.4后把SQLite这套相当出名的数据库软件,放进了作业系统工具集里。OS X包装的是第三版的SQLite,又称SQLite3。这套软件有几个特色:
软件属于公共财(public domain),SQLite可说是某种「美德软件」(virtueware),作者本人放弃着作权,而给使用SQLite的人以下的「祝福」(blessing):
May you do good and not evil. 愿你行善莫行恶
May you find forgiveness for yourself and forgive others. 愿你原谅自己宽恕他人
May you share freely, never taking more than you give. 愿你宽心与人分享,所取不多于你所施予
支援大多数的SQL指令(下面会简单介绍)。
一个档案就是一个数据库。不需要安装数据库服务器软件。
完整的Unicode支援(因此没有跨语系的问题)。
速度很快。
目
前在OS X
10.4里,SQLite是以/usr/bin/sqlite3的形式包装,也就说这是一个命令列工具,必须先从终端机(Terminal.app或其他
程序)进入shell之后才能使用。网络上有一些息协助使用SQLite的视觉化工具,但似乎都没有像CocoaMySQL(配合MySQL数据库使用)
那般好用。或许随时有惊喜也未可知,以下仅介绍命令列的操作方式。
SQLite顾名思议是以SQL为基础的数据库软件, ......
SQLite学习笔记
1.查看有哪些数据库,显示数据库列表
show databases;
2.显示表的结构
方法一:
use student;
describe student;
方法二:
des student.student;
方法三:
show columns from student;
3.显示MYSQL的版本
select version();
4.显示库中的数据表
use mysql;
show tables;
5.建库
create database 库名;
6.删除库
drop database 库名;
7.建数据表
use 库名
create table 表名(字段列表);
8.清空表中记录
delete from 表名
9.删除数据表
drop table 表名;
10.如何登陆到mysql
运行cmd
进入C:\Program Files\MySQL\MySQL Server 5.1\bin
执行mysql -u root –p
或者mysql -uroot –pliuchang
或者mysql -uroot –p
或者mysql –h localhost –uroot -p
输入密码即可
11.退出mysql
Quit或者exit
12.如何修改用户的密码
在DOS下进入如下目录
C:\Program Files\MySQL\MySQL Server 5.1\bin
运行如下命令:
mysqladmin -uroot -pliuchang password lc
1、给root加个密码lc。首先在DOS下进入mysql的bin目录下,然后键入以下命令
mysqladmin -uroot -password ......
前一阵字做项目(嵌入式linux),由于要保存大量的数据,而且最长要保存30天的时间。本来打算保存到文件中,每次启动应用程序的时候重新解析一遍,可是当数据量很大的时候,就出现效率的问题了。所以最后还是放弃了使用文件的打算,决定使用数据库存取数据。
linux下的数据库也很多,有开源的,也有收费的。对于我们来说,肯定要使用开源的数据库。以前用过Berkely DB,但是需要licience。所以结合效率性能以及大小限制,最终选定了Sqlite DB。我们对它的评价是“sqlite是一个优秀的完全free的开源数据项目”。
下面是一个简单的使用实例:
int main( int argc, char **argv )
{
sqlite3 *db;
sqlite3_stmt * stmt;
const char *zTail;
//打开数据库
int r = sqlite3_open("mysqlite.db",&db)
if(r){
......