egmkang

       "新的代数语言每5年就走红和过时,而我想要强调的是永恒的概念." ------By Knuth

[WM] WM下访问SQLite(一种替代SQL CE的解决方案)

  这两天用了用SQLite,感觉比SQL CE好用多了,最主要的是性能好多了.这一点对手持设备来讲很重要.

  闲话少说,下来将怎么在WM用.NET CF访问SQLite.

  1. ADO.NET Provider For SQLite.

  ADO.NET 提供程序是香港(貌似)一个公司提供的.项目地址见:http://sourceforge.net/projects/sqlite-dotnet2

  2. 对SQLite.NET的封装,提供一个简单的操作帮助类.

SQLiteHelper

 

  3. 增删改查:

Insert,Delete,Update
Select

 

  4. 其他

  SQLite性能绝对强悍.四表连接查询,查询200次,SQL CE需要44秒(with index),SQLite只需要3-6秒(with index).
插入,删除更新性能参见http://www.cnblogs.com/egmkang/archive/2009/06/06/1497678.html

  PS:最近发现执行sql的时候,最好使用单一的长连接,而不是ConnectionString.原因很简单,嵌入式数据库没有连接池技术,

在进行数据库查询中的链接的打开关闭费用相对来说比较高昂.这一点在写程序的时候注意以下.

  还有,有关二进制资源,需要及时释放,例如SqlCommand,这些在写Web 程序的时候体验不是很大,毕竟那种环境拥有大量

的内存,GC的效率又是比较高.

 

Windows CE,WinCE,WM,SQLite,.NET

/**********************************************************************
 * 机械教条主义
 *
 * From:          http://www.cnblogs.com/egmkang/
 * Email:         egmkang [at] 163.com
 * QQ Group:  20240291(慎入,可能没人打理)
 * Weibo:
        http://weibo.com/egmkang
 *
 **********************************************************************/

posted on 2009-07-12 16:33 egmkang 阅读(5056) 评论(20) 编辑 收藏

评论

#1楼 2009-07-12 19:52 peterzb      

有机会要去试试SQLite, 但最近还没有空, 被要求做J2ME开发先  回复 引用 查看   

#2楼 2009-07-12 21:10 施炯      

恩 回头试试 呵呵
支持~
 回复 引用 查看   

#3楼 2009-07-13 00:07 abllyboy[未注册用户]

请教一下楼主,SQLite为什么会在并发的时间OutOfMemery呀,只有十几条数据的。
本身想在项目的小部分做下测试结果OutOfMemery,哎...
 回复 引用   

#4楼 2009-07-13 06:54 Jake.NET      

不错,多一个选择。  回复 引用 查看   

#5楼[楼主] 2009-07-13 08:49 egmkang      

@abllyboy

请详细描述你的问题.
并发读取还是并发写?
写的话,需要自己人为加锁吧,否则问题可能会很多.
 回复 引用 查看   

#6楼 2009-07-13 09:13 abllyboy[未注册用户]

我的情况是:可能存在并发读也可能有并发写,我对SQLite的处理与平时大家对MSSQL的处理一样。真是奇怪了,害我都没在项目中用了。  回复 引用   

#7楼[楼主] 2009-07-13 12:05 egmkang      

@abllyboy
SQLite显然跟MSSQL不能等同对待.
读取并发没有啥大问题.
写入并发有问题的.你可以用一个单件模式+锁,使得写入数据库时不是并发写,否则,你会很痛苦.
 回复 引用 查看   

#8楼 2009-07-13 16:44 Ness[未注册用户]

小弟初次接觸WM APP,請問SqlCeDataReader 和 SqlCeHelper 在那裡找到?  回复 引用   

#9楼[楼主] 2009-07-13 18:05 egmkang      

@Ness
添加对System.Data.SqlServerCe.dll的引用,注意版本,VS 2005是3.0的,VS 2008 是3.5的,两者不兼容.
然后应用命名空间,就可以写程序了.
 回复 引用 查看   

#10楼 2009-07-13 18:09 David187[未注册用户]

楼上的:
using System.Data.SqlServerCe;
 回复 引用   

#11楼 2009-07-14 02:29 Ness[未注册用户]

謝謝樓上兩位~  回复 引用   

#12楼 2009-07-14 03:23 Ness[未注册用户]

SqlCeDataReader 是找到了,但SqlCeHelper 還是沒有  回复 引用   

#13楼 2009-07-14 03:45 Ness[未注册用户]

VS 2008  回复 引用   

#14楼[楼主] 2009-07-14 08:17 egmkang      

@Ness

汗.....SqlCeHelper是我自己写的..
你也可以照着上面的SqliteHelper写一个,基本上一样.
 回复 引用 查看   

#15楼 2009-07-14 12:20 Ness[未注册用户]

找了一個夜晚大概估到....也找到相關的CLASS,想問清楚~謝謝XD  回复 引用   

#16楼[楼主] 2009-07-14 13:02 egmkang      

@Ness
哦.那你平时访问数据库是直接用ADO.NET,还是自己略微封装一下,还是用ORM呢?
 回复 引用 查看   

#17楼 2009-08-13 21:21 YeanJay      

你好关于SQLite和SQLCE的性能问题想跟你探讨一下.QQ:153660561
msn:YeanJay@msn.com
 回复 引用 查看   

#18楼[楼主] 2009-08-14 08:18 egmkang      

@YeanJay

不好意思现在才给你回消息,QQ我一般不上的,公司封了.
我email:egmkang [at] 163.com,可以邮件交流
 回复 引用 查看   

#19楼 2009-08-31 19:31 春之痕      

首先对楼主的文章表示敬意。另外,我对SQLiteHelper做了一点修改,发表如下:http://www.cnblogs.com/springtrace/archive/2009/08/31/1557521.html,如有错误请指正,谢谢!  回复 引用 查看   

#20楼 2010-09-16 14:01 大铁片蕨      

谢谢楼主,帮助很大.少走很多弯路  回复 引用 查看