1、如果使用sqlite3时出现如下错误:
/!\ FAILSAFE /!\ Thu Jul 30 22:16:15 +0800 2009
Status: 500 Internal Server Error
unknown error
c:/ruby/lib/ruby/1.8/dl/import.rb:29:in `initialize'
c:/ruby/lib/ruby/1.8/dl/import.rb:29:in `dlopen'
c:/ruby/lib/ruby/1.8/dl/import.rb:29:in `dlload'
c:/ruby/lib/ruby/1.8/dl/import.rb:27:in `each'
c:/ruby/lib/ruby/1.8/dl/import.rb:27:in `dlload'
c:/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.3-x86-mswin32/lib/sqlite3/driver/dl/api.rb:31
... ...
从网上下载sqlite3.dll、sqlite3.exe拷贝到系统目录下即可解决。
2、如果使用mysql,目前rail2.3.3配合mysql5比较正常,mysql6暂时有些问题。在安装mysql5后要将libmySQL.dll拷贝到c:\ruby\bin目录下,保证驱动加载正确。 ......
1、如果使用sqlite3时出现如下错误:
/!\ FAILSAFE /!\ Thu Jul 30 22:16:15 +0800 2009
Status: 500 Internal Server Error
unknown error
c:/ruby/lib/ruby/1.8/dl/import.rb:29:in `initialize'
c:/ruby/lib/ruby/1.8/dl/import.rb:29:in `dlopen'
c:/ruby/lib/ruby/1.8/dl/import.rb:29:in `dlload'
c:/ruby/lib/ruby/1.8/dl/import.rb:27:in `each'
c:/ruby/lib/ruby/1.8/dl/import.rb:27:in `dlload'
c:/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.3-x86-mswin32/lib/sqlite3/driver/dl/api.rb:31
... ...
从网上下载sqlite3.dll、sqlite3.exe拷贝到系统目录下即可解决。
2、如果使用mysql,目前rail2.3.3配合mysql5比较正常,mysql6暂时有些问题。在安装mysql5后要将libmySQL.dll拷贝到c:\ruby\bin目录下,保证驱动加载正确。 ......
使用版本:sqlite-3.6.14.2
下载地址:http://www.sqlite.org/sqlite-3.6.14.2.tar.gz
首先参考readme的提示:
“
tar xzf sqlite.tar.gz ;# Unpack the source tree into "sqlite"
mkdir bld ;# Build will occur in a sibling directory
cd bld ;# Change to the build directory
../sqlite/configure ;# Run the configure script
make ;# Run the makefile.
make install ;# (Optional) Install the build product ......
从网上找的例子,创建了一个数据库,追加了几条记录后,然后关闭数据库,然后准备向PDA下载数据库,发现文件竟然被占用了,已经关闭了数据库连接也无效,后来从网上看到需要清除连接池
using (SQLiteConnection cn = new SQLiteConnection("Data Source=" + strTempPath + "\\Smoke.db3;Pooling=true;FailIfMissing=false"))
{
//在打开数据库时,会判断数据库是否存在,如果不存在,则在当前目录下创建一个
cn.Open();
using (SQLiteCommand cmd = new SQLiteCommand())
{
}
cn.Close();
System.Data.SQLite.SQLiteConnection.ClearAllPools(); //清除连接池之后,数据库文件才能使用
} ......
最近在项目中用到了SQLite。主要是客户端用到,这种小型内嵌数据库还是蛮实用的。
提起SQLite我不自觉的就想起了微软出的ACCESS。他们两个确实是有可比性的。曾经,小型网站数据库,ASP可以用到ACCESS。但是,PHP却是没有相对应的解决方案,自从SQLite的出现,给PHP提供了一个解决方案。
在客户端里面,我用到的数据保存方案有:CSV、INI、XML。其中XML是最强大的,但是可惜的是我用的解析器是Tinyxml,实用tinyxml的初衷就是简单,只用于配置,所以再复杂的事情就有些应付不过来。至少,逻辑上要复杂上许多。
我最近,看了迅雷,搜狗……一些软件的目录,都有一个sqlite3.dll。于是就去了解了下。貌似现在很多的im软件用这个做客户端数据库的也多起来了。看起来这个项目还是不错的。
SQLite有好几种版本,如果要想内嵌到应用程序当中去,那就要用sqlite-amalgamation这个版本了。它就是一个头文件,一个c的实现文件,这个文件里面有十多万行代码。我用VS2003编译的时候,编译器会提醒我,行数有些超长了-_-!!
C++里面对SQLite的包装类库里面,我觉得SOCI算是很不错的,这个项目不仅仅是对SQLite进行了包装,而且对其他数据库都有包装,像MySQL、PostgreS ......
sqlite官方站
http://www.sqlite.org/
SQL Syntax
http://www.sqlite.org/lang.html
sqlite中文站
http://www.sqlite.com.cn/
http://www.sqlitechina.org/
建立数据库档案
用sqlite3建立数据库的方法很简单,只要在shell下键入(以下$符号为shell提示号,请勿键入):
$ sqlite3 foo.db
如果目录下没有foo.db,sqlite3就会建立这个数据库。sqlite3并没有强制数据库档名要怎么取,因此如果你喜欢,也可以取个例如foo.icannameitwhateverilike的档名。
在sqlite3提示列下操作
进入了sqlite3之后,会看到以下文字:
SQLite version 3.1.3
Enter ".help" for instructions
sqlite>
这时如果使用.help可以取得求助,.quit则是离开(请注意:不是quit)
SQL的指令格式
所以的SQL指令都是以分号(;)结尾的。如果遇到两个减号(--)则代表注解,sqlite3会略过去。
建立资料表
假设我们要建一个名叫film的资料表,只要键入以下指令就可以了:
create table film(title, length, year, starring);
这样我们就建立了一个名叫film的资料表,里面有name、length、year、starring四个字段。
这个create table指令的语法为:
create table ta ......
sqlite官方站
http://www.sqlite.org/
SQL Syntax
http://www.sqlite.org/lang.html
sqlite中文站
http://www.sqlite.com.cn/
http://www.sqlitechina.org/
建立数据库档案
用sqlite3建立数据库的方法很简单,只要在shell下键入(以下$符号为shell提示号,请勿键入):
$ sqlite3 foo.db
如果目录下没有foo.db,sqlite3就会建立这个数据库。sqlite3并没有强制数据库档名要怎么取,因此如果你喜欢,也可以取个例如foo.icannameitwhateverilike的档名。
在sqlite3提示列下操作
进入了sqlite3之后,会看到以下文字:
SQLite version 3.1.3
Enter ".help" for instructions
sqlite>
这时如果使用.help可以取得求助,.quit则是离开(请注意:不是quit)
SQL的指令格式
所以的SQL指令都是以分号(;)结尾的。如果遇到两个减号(--)则代表注解,sqlite3会略过去。
建立资料表
假设我们要建一个名叫film的资料表,只要键入以下指令就可以了:
create table film(title, length, year, starring);
这样我们就建立了一个名叫film的资料表,里面有name、length、year、starring四个字段。
这个create table指令的语法为:
create table ta ......
SQLite包含了如下时间/日期函数:
datetime().......................产生日期和时间
date()...........................产生日期
time()...........................产生时间
strftime().......................对以上三个函数产生的日期和时间进行格式化
datetime()的用法是:datetime(日期/时间,修正符,修正符...)
date()和time()的语法与datetime()相同。
在时间/日期函数里可以使用如下格式的字符串作为参数:
YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
其中now是产生现在的时间。
举例(写这个笔记的时间是2006年10月17日晚8点到10点,测试环境:SQLite 2.8.17,WinXP,北京时间):
例1.
select datetime('now');
结果:2006-10-17 12:55:54
例2.
select datetime('2006-10-17');
结果:2006-10-17 12:00:00
例3.
select datetime('2006-10-17 00:20:00','+1 hour','-12 minute');
结果:2006-10-17 01:08:00
例4.
select date('2006-10-17','+1 day','+1 year');
结果:2007-10-18
例5.
select datetime('now','start of year');
结果:2006-01-01 00:00:00
例6 ......