在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来映射的,工作完全正常。
估计网上那个发帖的人也和我遇到了相同的问题,但是可恶的是竟然提供了一个做错的答案,误人子弟!汗一个
相关文档:
SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比 ......
前序:
Sqlite3 的确很好用。小巧、速度快。但是因为非微软的产品,帮助文档总觉得不够。这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记。
这里要注明,我是一个跨平台专注者,并不喜欢只用 windows 平台。我以前的工作就是为 unix 平台写代码。下面我所写的东西,虽然没有验证,但是我已尽 ......
1. SQLite Database Browser 是一个SQLite数据库管理工具。是开源的、免费的。
Home Page
http://sqlitebrowser.sourceforge.net/
Download
http://sourceforge.net/project/showfiles.php?group_id=87946
Wiki
http://en.wikipedia.org/wiki/SQLite_Database_Browser
2.  ......
SQLite 作为一个轻量级嵌入式数据库,还是非常好用的。雨痕极力推荐~~~~~~
今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟!
下面是他发给我的测试代码。我晕~~~~~~
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
......
import os
import unittest # 包含单元测试模块
import sqlite3 as sqlite # 包含sqlite3模块
def get_db_path():
return "sqlite_testdb"
class TransactionTests(unittest.TestCase): # 单元测试第一步: 由TestCase派生类
def setUp(self): # 单元测试环境配置
......