SQLite数据库 日期格式数据查询问题

SQLite数据库 日期格式数据查询问题,第1张

跟mssql查询方法差不多。

但在插入数据时,需要用date.ToString("s"),否则插入的数据不是正确的日期格式,自然查询时就出错了。

相信你还会遇到更多的问题,到时再问我吧!

首先,sqlite数据库在时间处理上和sqlserver还有oracle不同,下面根据自己做过的实例总结一下.

创建了一个Log数据表:

LogID SourceID OperatorID LogType LogLevel LogTime LogContent

1 aaa.aspx 0 2 1 2011-08-18 16:44:32.000 aaaa

2 bbb.aspx 1 2 2 2011-08-18 16:38:32.000 bbbb

3 ccc.aspx 2 3 3 2011-09-02 cccc

4 ddd.aspx 3 1 4 2011-08-15 dddd

5 eee.aspx 4 1 3 2011-08-18 eee

普通的sqlserver的查询语句如下:select * from Log where LogTime='2011-09-02'可以查询出"'2011-09-02"的数据。

而在sqlite数据库中,写上面的语句,查询不到任何数据;说明sqlserver于sqlite对于时间处理上是不同的。那么如何写一条以时间为查询条件的sql语句才能在sqlite数据库中把想要的结果查询出来呢?请看::::

select * from Log where datetime(LogTime)=datetime('2011-08-18 16:38:32.000')

sqlite数据查询语句,必须对时间字段和传入的时间参数做转换.即加上datetime()转换.

执行了上面的语句,就可以得到要查找到结果。如果按照sqlserver的写法,那么是不会得到查询结果的。

另外,一些错误的查询语句如下:

1: select * from Log where datetime(LogTime)=datetime('2011-08-18'),这条语句只能查询到一条数据,就是对应LogID=5的那条,而不会得到LogID=1和LogID=2的数据。可见,sqlite对于时间是非常严格的。精确度非常高。

2:select * from Log where datetime(LogTime)=datetime('2011-8-18'),这条语句是查询不到任何结果,因为sqlite的时间要求是yyyy-MM-dd或者yyyy-MM-dd hh:mm:ss的。当月数为10以下,那么必须写成0x的形式(如:05),所以在做开发的时候一定要对入库的时间做相应处理。

3: select * from Log where datetime(LogTime)=datetime('2011-08-9'),同样的,这条语句也查询不到任何结果,应该把9改成09,就可以得到查询结果了。

sqlite查询过快导致数据库锁住

原因:更新写的时候需要排他锁。但是查询语句有些东西没有正常释放,导致共享锁一直未正常释放,排他锁得不到满足。几经测试,终于发现,是ExecuteReader这个函数在作怪,这个函数返回的是一个SQLiteDataReader对象,如果使用的时候和上面的代码一样只是read就完了,没有去关闭,这个共享锁仍旧存在。

解决方案:

执行完毕释放一下即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6636968.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存