回家前的挣扎——SQLite增删改查

引言

最后一天,公司就两个人,也不知道弄点什么,就在网上找了Sqlite的文档,看了看,这里也是现学现卖,给自己找点事做,感觉时间过得还是比较快的,不然焦急等待,滋味不好受啊。

SQLite简介

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至今已经有13个年头,SQLite也迎来了一个版本 SQLite 3已经发布。(百度百科)

SQLite使用

跟使用sqlhelper一样封装sqlitehelper,通过下面的代码你会发现他们是非常的相似的。

  1  public class SQLiteHelper
  2     {
  3         private static readonly string databaseName = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["databaseName"];
  4         /// <summary>
  5         /// 创建数据库
  6         /// </summary>
  7         /// <param name="databaseName">数据库文件路径</param>
  8         public static void CreateDataBase()
  9         {
 10             if (!File.Exists(databaseName))
 11             {
 12                 SQLiteConnection.CreateFile(databaseName);
 13             }
 14         }
 15         /// <summary>
 16         /// 获得连接对象
 17         /// </summary>
 18         /// <returns></returns>
 19         public static SQLiteConnection GetSQLiteConnection()
 20         {
 21             #region 方法一
 22             SQLiteConnectionStringBuilder connStr = new SQLiteConnectionStringBuilder();
 23             connStr.DataSource = databaseName;
 24             connStr.Password = "123456";
 25             connStr.Pooling = true;
 26             return new SQLiteConnection(connStr.ToString());
 27             #endregion
 28             #region 方法二
 29             //return new SQLiteConnection(string.Format("Data Source={0};password=123456", databaseName));
 30             #endregion
 31         }
 32         /// <summary>
 33         /// 匹配参数
 34         /// </summary>
 35         /// <param name="cmd"></param>
 36         /// <param name="conn"></param>
 37         /// <param name="cmdText"></param>
 38         /// <param name="p"></param>
 39         private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params object[] p)
 40         {
 41             if (conn.State == System.Data.ConnectionState.Closed)
 42             {
 43                 conn.Open();
 44             }
 45             cmd.Parameters.Clear();
 46             cmd.Connection = conn;
 47             cmd.CommandText = cmdText;
 48             cmd.CommandType = System.Data.CommandType.Text;
 49             cmd.CommandTimeout = 30;
 50             if (p != null)
 51             {
 52                 foreach (object item in p)
 53                 {
 54                     cmd.Parameters.AddWithValue(string.Empty, item);
 55                 }
 56             }
 57         }
 58         /// <summary>
 59         /// 返回DataSet
 60         /// </summary>
 61         /// <param name="cmdText"></param>
 62         /// <param name="p"></param>
 63         /// <returns></returns>
 64         public static DataSet ExecuteDataset(string cmdText, params object[] p)
 65         {
 66             DataSet ds = new DataSet();
 67             SQLiteCommand cmd = new SQLiteCommand();
 68             using (SQLiteConnection conn = GetSQLiteConnection())
 69             {
 70                 PrepareCommand(cmd, conn, cmdText, p);
 71                 SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
 72                 sda.Fill(ds);
 73             }
 74             return ds;
 75         }
 76         /// <summary>
 77         /// 返回第一行
 78         /// </summary>
 79         /// <param name="cmdText"></param>
 80         /// <param name="p"></param>
 81         /// <returns></returns>
 82         public static DataRow ExecuteDataRow(string cmdText, params object[] p)
 83         {
 84             DataSet ds = ExecuteDataset(cmdText, p);
 85             if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
 86             {
 87                 return ds.Tables[0].Rows[0];
 88             }
 89             else
 90             {
 91                 return null;
 92             }
 93         }
 94         /// <summary>
 95         /// 执行非查询操作 返回受影响的行数
 96         /// </summary>
 97         /// <param name="cmdText"></param>
 98         /// <param name="p"></param>
 99         /// <returns></returns>
100         public static int ExecuteNonQuery(string cmdText, params object[] p)
101         {
102             SQLiteCommand cmd = new SQLiteCommand();
103             using (SQLiteConnection conn = GetSQLiteConnection())
104             {
105                 PrepareCommand(cmd, conn, cmdText, p);
106                 return cmd.ExecuteNonQuery();
107             }
108         }
109         /// <summary>
110         /// 返回SQLiteDataReader
111         /// </summary>
112         /// <param name="cmdText"></param>
113         /// <param name="p"></param>
114         /// <returns></returns>
115         public static SQLiteDataReader ExecuteReader(string cmdText, params object[] p)
116         {
117             SQLiteConnection conn = GetSQLiteConnection();
118             SQLiteCommand cmd = new SQLiteCommand();
119             try
120             {
121                 PrepareCommand(cmd, conn, cmdText, p);
122                 SQLiteDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
123                 return reader;
124             }
125             catch (Exception)
126             {
127                 conn.Close();
128                 throw;
129             }
130         }
131         /// <summary>
132         /// 返回结果集的首行首列
133         /// </summary>
134         /// <param name="cmdText"></param>
135         /// <param name="p"></param>
136         /// <returns></returns>
137         public static object ExecuteScalar(string cmdText, params object[] p)
138         {
139             SQLiteCommand cmd = new SQLiteCommand();
140             using (SQLiteConnection conn = GetSQLiteConnection())
141             {
142                 PrepareCommand(cmd, conn, cmdText, p);
143                 return cmd.ExecuteScalar();
144             }
145         }
146         /// <summary>
147         /// 分页获取DataSet
148         /// </summary>
149         /// <param name="recordCount"></param>
150         /// <param name="pageIndex"></param>
151         /// <param name="pageSize"></param>
152         /// <param name="cmdText"></param>
153         /// <param name="countText"></param>
154         /// <param name="p"></param>
155         /// <returns></returns>
156         public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, params object[] p)
157         {
158             if (recordCount < 0)
159                 recordCount = int.Parse(ExecuteScalar(countText, p).ToString());
160             DataSet ds = new DataSet();
161             SQLiteCommand command = new SQLiteCommand();
162             using (SQLiteConnection connection = GetSQLiteConnection())
163             {
164                 PrepareCommand(command, connection, cmdText, p);
165                 SQLiteDataAdapter da = new SQLiteDataAdapter(command);
166                 da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result");
167             }
168             return ds;
169         }
170     }

SQLite创建数据表

 1            try
 2             {
 3                 //创建表
 4                 SQLiteHelper.ExecuteNonQuery("create table users(id varchar(32),userName varchar(20),userPwd varchar(20))");
 5             }
 6             catch (Exception)
 7             {
 8
 9                 throw;
10             }

SQLite添加数据

 1             //参数化方式
 2             int r = SQLiteHelper.ExecuteNonQuery("insert into users values(?,?,?)", new string[] { Guid.NewGuid().ToString(), name, pwd });
 3             //拼接方式
 4             //int result = SQLiteHelper.ExecuteNonQuery("insert into users values('" + Guid.NewGuid().ToString() + "','" + name + "','" + pwd + "')");
 5             if (r > 0)
 6             {
 7                 return "1";
 8             }
 9             else
10             {
11                 return "0";
12             }

Sqlite删除数据

 1    protected void linkDelete_Click(object sender, EventArgs e)
 2         {
 3             LinkButton link = sender as LinkButton;
 4             string id = link.CommandArgument;
 5             int result = SQLiteHelper.ExecuteNonQuery("delete from users where id=?", new string[] { id });
 6             if (result > 0)
 7             {
 8                 Response.Write("<script>alert('删除成功');</script>");
 9                 rptUsers.DataSource = SQLiteHelper.ExecuteDataset("select * from users");
10                 rptUsers.DataBind();
11             }
12         }

SQLite修改数据

1   SQLiteHelper.ExecuteNonQuery("update users set userName=? where id=?", new string[] { "admin", "14732d6f-3cf5-4cad-8f75-542d9d6fce17" });

SQLite查询数据

1  SQLiteHelper.ExecuteDataset("select * from users");

SQLite的数据类型

首先你会接触到一个让你惊讶的名词: Typelessness(无类型). 对! SQLite是无类型的. 这意味着你可以保存任何类型的数据到你所想要保存的任何表的任何列中, 无论这列声明的数据类型是什么(只有在一种情况下不是, 稍后解释). 对于SQLite来说对字段不指定类型是完全有效的. 如:
Create Table ex1(a, b, c);
诚然SQLite允许忽略数据类型, 但是仍然建议在你的Create Table语句中指定数据类型. 因为数据类型对于你和其他的程序员交流, 或者你准备换掉你的数据库引擎时能起到一个提示或帮助的作用. SQLite支持常见的数据类型, 如:
CREATE TABLE ex2
a VARCHAR(10),
b NVARCHAR(15),
c TEXT,
d INTEGER,
e FLOAT,
f BOOLEAN,
g CLOB,
h BLOB,
i TIMESTAMP,
j NUMERIC(10,5)
k VARYING CHARACTER (24),
l NATIONAL VARYING CHARACTER(16)
前面提到在某种情况下, SQLite的字段并不是无类型的. 即在字段类型为”Integer Primary Key”时.

DEMO下载猛戳这里:链接:http://pan.baidu.com/s/1eQ1LWgq 密码:txeo

总结

总体来说sqlite还是比较容易上手的,看了一上午的文档,然后做了一个简单的demo,感觉跟sqlserver语法很相似。

晚上就要回家了,祝大家,马年,马到成功,心想事成.....

 

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。

转载:http://www.cnblogs.com/wolf-sun/p/3536061.html

时间: 2024-08-22 22:26:49

回家前的挣扎——SQLite增删改查的相关文章

详解Android中一些SQLite的增删改查操作_Android

在Android开发中经常要涉及到对数据的操作.Android本身提供了四种数据存储方式.包括:SharePreference,SQLite,Content Provider,File. 在Android,数据都是么私有的,要实现数据共享,正确方式是使用Content Provider.SQLite: SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用的一种数据存储方式.Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的API.Share

初学android,现在要用sqlite数据库做一个用界面显示的增删改查,跪求各位大神指点!!!

问题描述 初学android,现在要用sqlite数据库做一个用界面显示的增删改查,跪求各位大神指点!!! 在android中,用sqlite数据库做一个用页面显示的增删改查,一个页面操作插入一条记录,一个页面显示查询所有记录并做删除和修改记录.跪求大神指点!!! 解决方案 http://blog.csdn.net/liuhe688/article/details/6715983 参考这个例子 满足你的需求么 解决方案二: http://blog.csdn.net/jaycee110905/ar

[Android] SQLite数据库之增删改查基础操作

    在编程中经常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,能够支持Windows/Linux/Unix等主流操作系统,同时能够跟很多程序语言如C#.PHP.Java等相结合.下面先回顾SQL的基本语句,再讲述Android的基本操作. 一. adb shell回顾SQL语句     首先,我感觉自己整个大学印象最深的几门课就包括<数据库>,所以想先回顾SQL增删改查的基本语句.而在Androi

详解Android中一些SQLite的增删改查操作

在Android开发中经常要涉及到对数据的操作.Android本身提供了四种数据存储方式.包括:SharePreference,SQLite,Content Provider,File. 在Android,数据都是么私有的,要实现数据共享,正确方式是使用Content Provider. SQLite: SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用的一种数据存储方式.Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的API. Sha

CoreData的增删改查概述

近几天一直在使用 CoreData, 以前觉得它是一门高深的技术, 等自己用了之后才觉得,它是那么的平易近人. 一: 首先我们要在创建应用程序的时候勾选 UseCoreData 选项, 当然也可以自己后期创建. 系统会生成如下AppDelegate.h的文件 #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic

数据库增删改查的代码,有吗

问题描述 数据库增删改查的代码,有吗 用SSH框架如何增删改查数据库的一张学生表,求代码!我已经写到了dao层的实现类. 解决方案 //搜集整理了一下网上的代码.找了半天居然找不到一条插入语句.好郁闷的 //感觉速度还可以.小文件.很多小应用程序在用这个数据库 //SQLite使用办法.直接COPYDLL文件System.Data.SQLite.DLL到应用程序DEBUG目录下. 然后在项目中添加引用,找到这个文件即可 //添加引用 using System;using System.Colle

【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建

数据库的创建和sql语句增删改查 1. 加载驱动. 2. 连接数据库. 3. 操作数据库.   创建表: create table person( _id integer primary key, name varchar(20), age integer );   添加: insert into person(name, age) values('lisi', 19);   删除: delete from person where _id = 1;   修改: update person se

二、SQL语句映射文件(2)增删改查、参数、缓存

 二.SQL语句映射文件(2)增删改查.参数.缓存 2013-09-06 17:05:42 标签:配置文件 动态 元素 MyBatis学习 之 一.MyBatis简介与配置MyBatis+Spring+MySql MyBatis学习 之 二.SQL语句映射文件(1)resultMap MyBatis学习 之 二.SQL语句映射文件(2)增删改查.参数.缓存 MyBatis学习 之 三.动态SQL语句 MyBatis学习 之 四.MyBatis配置文件 2.2 select 一个select 元素

junit-MyEclipse用Junit测试Hibernate的增删改查出错

问题描述 MyEclipse用Junit测试Hibernate的增删改查出错 我在用myeclipse用Junit测试Hibernate的增删改查时,每次执行某个方法,其它的方法也跟着 执行:比如我先写了个add方法来向数据库插入数据没有问题,然后再写个方法来查询数据库里 的数据时,那个add方法又会自动执行一遍,请问这是怎么回事,该如何解决 解决方案 看一下图片,可以选中指定的方法执行! 解决方案二: http://blog.csdn.net/sias1991/article/details/