设为首页 收藏本站
查看: 1067|回复: 0

[经验分享] SQLite内存数据库(转自:http://www.cr173.com/html/6965_1.html)

[复制链接]

尚未签到

发表于 2016-12-1 09:51:43 | 显示全部楼层 |阅读模式
SQLite 介绍
一. SQLite 是实现了SQL 92标准的一个大子集的嵌入式数据库.其以在一个库中组合了数据库引擎和接口,能将所有数据存储于单个文件中而著名.我觉得SQLite的功能一定程度上居于MySQL 和PostgreSQL之间.尽管如此,在性能上面,SQLite常常快2-3倍 (甚至更多).这利益于其高度调整了的内部架构,因为它除去了服务器端到客户端和客户端到服务器端的通信。

二. 而令人印象深刻的特点是你可将你的整个数据库系统放在其中.利用非常高效的内存组织,SQLite只需在很小的内存中维护其很小的尺寸,远远比其它任何数据库系统都小.这些特点使得其成为在需要高效地应用数据库的任务中一个非常方便的工具.
SQLite 优势
一 . 除了速度和效率,SQLite还有其它好多的优势使得其能成为许多任务中一个理想的解决方案.因为SQLite的数据库都是简单文件,因此无须一个管理队伍花时间来构造复杂的权限结构来保护用户的数据库.因为权限通过文件系统自动进行.这也同时意味着(数据库空间的大小只与环境有关,与本身无关)无段特殊的规则来了解用户磁盘空间.用户可以从创建他们想要的任意多的数据库和对其对这些数据库的绝对控制权而得到好处.

二 . 数据库就是一个文件的事实使用SQLite可以轻易地在服务器间移动.SQLite也除去了需要大量内存和其它系统资源的伺候进程.即使当数据库在大量地使用时也是如此.
创建内存数据库
1.由于业务的需要,我使用SQLite 内存数据库制作一个缓存,IIS 停止内存数据库的数据全部丢失,不知道SQLite 是否可以做分布式的内存数据管理。
2.添加System.Data.SqlClient引用,程序集请到这里http://sqlite.phxsoftware.com/下载
3.创建内存数据库 , Data Source=:memory:;Version=3; 这个连接字符串折腾了很久, 当然这里也可以使用文件来存储数据,只需要修改 Data Source=:memory: 为 Data Source= Cache.db 就ok !当然这个表需要在Global 里面创建
代码
SQLiteConnection conn = (SQLiteConnection)new SQLiteConnection("Data Source=:memory:;Version=3; Cache Size = 3000;New=True;Pooling=False;Max Pool Size=100;LongNames = 0; Timeout = 1000; NoTXN = 0; SyncPragma = NORMAL; StepAPI = 0");conn.Open();IDbCommand dbcmd = conn.CreateCommand();//创建内存表string sql = "CREATE TABLE [AvTable] ( [ID] INTEGER PRIMARY KEY NOT NULL,[CityPair] VARCHAR(6) NULL,[FlightNo] VARCHAR(50) NULL,[FlightDate] VARCHAR(10) NULL,[CacheTime] VARCHAR(2000) NULL,[AVNote] VARCHAR(2000) NULL)";dbcmd.CommandText = sql;dbcmd.Connection = conn;dbcmd.ExecuteNonQuery();SQLiteConn = conn;

全局属性,打开数据库连接后创建好表后赋值给这个属性,以后操作数据一致使用这个连接。
public static SQLiteConnection SQLiteConn { get; set; }

使用SQL 语句操作表如下, sql 是代表sql 语句

string sql = "Update AVTable Set CityPair='" + av.CityPair + "',CacheTime='" + DateTime.Now.ToString() + "',AVNote='" + av.AVNote + "' Where FlightNo='" + av.FlightNo + "' And FlightDate='" + av.FlightDate + "'";IDbCommand dbcmd = MemoryDatabse.SQLiteConn.CreateCommand();dbcmd.CommandText = sql;dbcmd.Connection = MemoryDatabse.SQLiteConn;int count = dbcmd.ExecuteNonQuery();


SQLite 的查询语法 和 SQL SERVER 有一些区别 。
提取 avcache表 11-20 的数据 。
Select * From avcache Limit 9 Offset 10;
以上语句表示从avcache 表获取数据,跳过10行,取9行 。

另外一种写法, 从10 开始提取 提取9条数据 。
select * from avcache limit10,9
语法

sql = "select * from avcache where "+条件+" order by "+排序+" limit "+要显示多少条记录+" offset "+跳过多少条记录;
例子

select * from avcache limit 15 offset 20
意思是说: 从avcache 表跳过20条记录选出15条记录

由于最近工作需要开始学习SQLite ,写的难免有些粗糙的地方,希望大家指正,提供更好的方法!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-308057-1-1.html 上篇帖子: Sqlite和SQLCE在Windows Mobile 6上的性能对比 下篇帖子: SQLITE中文编码转换的问题终于解决了。(转载)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表