在sqlite数据库中,int类型不等于integer数据类型
这些天一直在忙销售管理软件易卖通客户端的程序编写,由于需要采用本地数据缓存机制来提高程序的数据访问效率,所以需要在客户端使用一个小巧的本地数据库。这个数据库当然要小而精悍的。我也不想做强盗,于是就选择Sqlite吧——文件数据库,只要一个Sqlite.dll就可以操作数据库。
不得不趁人本人是有点偷懒,Add Nhibernate+ActiveRecord做O/R mapping,貌似这样的架构有杀鸡用牛刀之嫌。
昨天碰到一个非常怪异的问题,当我调用ActiveRecordBase.FindAll的时候,返回一个数组内部的所有元素都是null。
这就奇怪了,数据库里面已经存在数据。于是上网查资料,看到有一个家伙说不能把Primary key映射为Identify,只能用Native。修改后还是不行,TMD,网络上的骗子还真不少,特别是国内,忽悠的人多,真才实学的少!
于是开始测试其他表的FIND功能,一切工作正常。见鬼,DAMN!
于是用.sch命令查看表的schema异同,发现除了Primary key的定义有一点差别外,无异常。
又开始怀疑是不是DLL加载情况,联想到文档说要加载DynamicProxy,马上下载新版本DynamicProxy。还是不管用。
抱着死马当活马医试试看的心态,修改了表的Primary Key定义,也就是把原来Primary key中的int类型字段,改成了integer类型。。。测试通过。。。啦!
公布答案,表的Primary key被我定义成int而不是integer,修改后就行了,而且,此列是可以用Identify来映射的,工作完全正常。
估计网上那个发帖的人也和我遇到了相同的问题,但是可恶的是竟然提供了一个做错的答案,误人子弟!汗一个
相关文档:
主要通过pragma指令来实现。
比如: 空间释放、磁盘同步、Cache大小等。
不要打开。前文提高了,Vacuum的效率非常低!
PRAGMA auto_vacuum;
PRAGMA auto_vacuum = 0 | 1;
查询或设置数据库的auto-vacuum标记。
正常情况下,当提交一个从数据库中删除数据的事务时,数据库文件不改变大小。未使用的文件页被标记并在以 ......
这是一个有关分页的实例,仅供参考(代码来自网络)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;
using System.Threading;
using System.Collections;
us ......
SQLite 作为一个轻量级嵌入式数据库,还是非常好用的。雨痕极力推荐~~~~~~
今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟!
下面是他发给我的测试代码。我晕~~~~~~
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
......
sqlite是不错的内存数据库,内存数据库是处理大量并发数据的优先选择。但有些大量数据的并发并不是数据处理本身的问题,例如逻辑上必须有先后次序的数据是并发速度不能解决的问题。抛开这些问题一个简单大容量的解决方案是用一个内存数据库做前端一个硬盘数据库做后端,内存数据库定期把数据同步到后端的硬盘数据库。这个方 ......