SQLiteHelperSQLite帮助类

摘要:
最近做项目用到了SQLite数据库,就自己写了个SQLite帮助类,类似于SQLHelper。不过是按照我常用方式写的,主要与SQLHelper不同的是1、这个帮助类并没有内置ConnectionString,是需要在调用方法的时候指定的,这样的好处的是:在一般的三层架构时都会在Helper里指定一个数据库连接,但是如果我又想用这个帮助类但是我想查询其他数据库的时候就无法使用了。

最近做项目用到了SQLite数据库,就自己写了个SQLite帮助类,类似于SQLHelper。

不过是按照我常用方式写的,主要与SQLHelper不同的是

1、这个帮助类并没有内置ConnectionString,是需要在调用方法的时候指定的,这样的好处的是:在一般的三层架构时都会在Helper里指定一个数据库连接,但是如果我又想用这个帮助类但是我想查询其他数据库的时候就无法使用了。

2、PrepareCommand这个方法我也修改了下,由于增删改查4个方法都用到这个方法来减少重复代码,但是我目前就在插入和更新用到事务操作,查询没有用到,但不知道这样写到底对不对,哪位看了可以帮忙给出个了比较好的解决方法?

3、由于SQLite内置了limit,给我们分页提供了很大的便利,所以我在这个帮助类里面也自己封装了分页方法。

不多说了,附代码:

001usingSystem;
002usingSystem.Collections.Generic;
003usingSystem.Linq;
004usingSystem.Text;
005usingSystem.Data;
006usingSystem.Data.Common;
007usingSystem.Data.SQLite;
008
009namespaceTools.Data
010{
011/// <summary>
012/// 本类为SQLite数据库帮助静态类,使用时只需直接调用即可,无需实例化
013/// </summary>
014publicstaticclassSQLiteHelper
015{
016#region ExecuteNonQuery
017/// <summary>
018/// 执行数据库操作(新增、更新或删除)
019/// </summary>
020/// <param name="connectionString">连接字符串</param>
021/// <param name="cmd">SqlCommand对象</param>
022/// <returns>所受影响的行数</returns>
023publicstaticintExecuteNonQuery(stringconnectionString, SQLiteCommand cmd)
024{
025intresult = 0;
026if(connectionString == null|| connectionString.Length == 0)
027thrownewArgumentNullException("connectionString");
028using(SQLiteConnection con = newSQLiteConnection(connectionString))
029{
030SQLiteTransaction trans = null;
031PrepareCommand(cmd, con, reftrans, true, cmd.CommandType, cmd.CommandText);
032try
033{
034result = cmd.ExecuteNonQuery();
035trans.Commit();
036}
037catch(Exception ex)
038{
039trans.Rollback();
040throwex;
041}
042}
043returnresult;
044}
045
046/// <summary>
047/// 执行数据库操作(新增、更新或删除)
048/// </summary>
049/// <param name="connectionString">连接字符串</param>
050/// <param name="commandText">执行语句或存储过程名</param>
051/// <param name="commandType">执行类型</param>
052/// <returns>所受影响的行数</returns>
053publicstaticintExecuteNonQuery(stringconnectionString, stringcommandText, CommandType commandType)
054{
055intresult = 0;
056if(connectionString == null|| connectionString.Length == 0)
057thrownewArgumentNullException("connectionString");
058if(commandText == null|| commandText.Length == 0)
059thrownewArgumentNullException("commandText");
060SQLiteCommand cmd = newSQLiteCommand();
061using(SQLiteConnection con = newSQLiteConnection(connectionString))
062{
063SQLiteTransaction trans = null;
064PrepareCommand(cmd, con, reftrans, true, commandType, commandText);
065try
066{
067result = cmd.ExecuteNonQuery();
068trans.Commit();
069}
070catch(Exception ex)
071{
072trans.Rollback();
073throwex;
074}
075}
076returnresult;
077}
078
079/// <summary>
080/// 执行数据库操作(新增、更新或删除)
081/// </summary>
082/// <param name="connectionString">连接字符串</param>
083/// <param name="commandText">执行语句或存储过程名</param>
084/// <param name="commandType">执行类型</param>
085/// <param name="cmdParms">SQL参数对象</param>
086/// <returns>所受影响的行数</returns>
087publicstaticintExecuteNonQuery(stringconnectionString, stringcommandText, CommandType commandType, paramsSQLiteParameter[] cmdParms)
088{
089intresult = 0;
090if(connectionString == null|| connectionString.Length == 0)
091thrownewArgumentNullException("connectionString");
092if(commandText == null|| commandText.Length == 0)
093thrownewArgumentNullException("commandText");
094
095SQLiteCommand cmd = newSQLiteCommand();
096using(SQLiteConnection con = newSQLiteConnection(connectionString))
097{
098SQLiteTransaction trans = null;
099PrepareCommand(cmd, con, reftrans, true, commandType, commandText);
100try
101{
102result = cmd.ExecuteNonQuery();
103trans.Commit();
104}
105catch(Exception ex)
106{
107trans.Rollback();
108throwex;
109}
110}
111returnresult;
112}
113#endregion
114
115#region ExecuteScalar
116/// <summary>
117/// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
118/// </summary>
119/// <param name="connectionString">连接字符串</param>
120/// <param name="cmd">SqlCommand对象</param>
121/// <returns>查询所得的第1行第1列数据</returns>
122publicstaticobjectExecuteScalar(stringconnectionString, SQLiteCommand cmd)
123{
124objectresult = 0;
125if(connectionString == null|| connectionString.Length == 0)
126thrownewArgumentNullException("connectionString");
127using(SQLiteConnection con = newSQLiteConnection(connectionString))
128{
129SQLiteTransaction trans = null;
130PrepareCommand(cmd, con, reftrans, true, cmd.CommandType, cmd.CommandText);
131try
132{
133result = cmd.ExecuteScalar();
134trans.Commit();
135}
136catch(Exception ex)
137{
138trans.Rollback();
139throwex;
140}
141}
142returnresult;
143}
144
145/// <summary>
146/// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
147/// </summary>
148/// <param name="connectionString">连接字符串</param>
149/// <param name="commandText">执行语句或存储过程名</param>
150/// <param name="commandType">执行类型</param>
151/// <returns>查询所得的第1行第1列数据</returns>
152publicstaticobjectExecuteScalar(stringconnectionString, stringcommandText, CommandType commandType)
153{
154objectresult = 0;
155if(connectionString == null|| connectionString.Length == 0)
156thrownewArgumentNullException("connectionString");
157if(commandText == null|| commandText.Length == 0)
158thrownewArgumentNullException("commandText");
159SQLiteCommand cmd = newSQLiteCommand();
160using(SQLiteConnection con = newSQLiteConnection(connectionString))
161{
162SQLiteTransaction trans = null;
163PrepareCommand(cmd, con, reftrans, true, commandType, commandText);
164try
165{
166result = cmd.ExecuteScalar();
167trans.Commit();
168}
169catch(Exception ex)
170{
171trans.Rollback();
172throwex;
173}
174}
175returnresult;
176}
177
178/// <summary>
179/// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
180/// </summary>
181/// <param name="connectionString">连接字符串</param>
182/// <param name="commandText">执行语句或存储过程名</param>
183/// <param name="commandType">执行类型</param>
184/// <param name="cmdParms">SQL参数对象</param>
185/// <returns>查询所得的第1行第1列数据</returns>
186publicstaticobjectExecuteScalar(stringconnectionString, stringcommandText, CommandType commandType, paramsSQLiteParameter[] cmdParms)
187{
188objectresult = 0;
189if(connectionString == null|| connectionString.Length == 0)
190thrownewArgumentNullException("connectionString");
191if(commandText == null|| commandText.Length == 0)
192thrownewArgumentNullException("commandText");
193
194SQLiteCommand cmd = newSQLiteCommand();
195using(SQLiteConnection con = newSQLiteConnection(connectionString))
196{
197SQLiteTransaction trans = null;
198PrepareCommand(cmd, con, reftrans, true, commandType, commandText);
199try
200{
201result = cmd.ExecuteScalar();
202trans.Commit();
203}
204catch(Exception ex)
205{
206trans.Rollback();
207throwex;
208}
209}
210returnresult;
211}
212#endregion
213
214#region ExecuteReader
215/// <summary>
216/// 执行数据库查询,返回SqlDataReader对象
217/// </summary>
218/// <param name="connectionString">连接字符串</param>
219/// <param name="cmd">SqlCommand对象</param>
220/// <returns>SqlDataReader对象</returns>
221publicstaticDbDataReader ExecuteReader(stringconnectionString, SQLiteCommand cmd)
222{
223DbDataReader reader = null;
224if(connectionString == null|| connectionString.Length == 0)
225thrownewArgumentNullException("connectionString");
226
227SQLiteConnection con = newSQLiteConnection(connectionString);
228SQLiteTransaction trans = null;
229PrepareCommand(cmd, con,reftrans, false, cmd.CommandType, cmd.CommandText);
230try
231{
232reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
233}
234catch(Exception ex)
235{
236throwex;
237}
238returnreader;
239}
240
241/// <summary>
242/// 执行数据库查询,返回SqlDataReader对象
243/// </summary>
244/// <param name="connectionString">连接字符串</param>
245/// <param name="commandText">执行语句或存储过程名</param>
246/// <param name="commandType">执行类型</param>
247/// <returns>SqlDataReader对象</returns>
248publicstaticDbDataReader ExecuteReader(stringconnectionString, stringcommandText, CommandType commandType)
249{
250DbDataReader reader = null;
251if(connectionString == null|| connectionString.Length == 0)
252thrownewArgumentNullException("connectionString");
253if(commandText == null|| commandText.Length == 0)
254thrownewArgumentNullException("commandText");
255
256SQLiteConnection con = newSQLiteConnection(connectionString);
257SQLiteCommand cmd = newSQLiteCommand();
258SQLiteTransaction trans = null;
259PrepareCommand(cmd, con, reftrans, false, commandType, commandText);
260try
261{
262reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
263}
264catch(Exception ex)
265{
266throwex;
267}
268returnreader;
269}
270
271/// <summary>
272/// 执行数据库查询,返回SqlDataReader对象
273/// </summary>
274/// <param name="connectionString">连接字符串</param>
275/// <param name="commandText">执行语句或存储过程名</param>
276/// <param name="commandType">执行类型</param>
277/// <param name="cmdParms">SQL参数对象</param>
278/// <returns>SqlDataReader对象</returns>
279publicstaticDbDataReader ExecuteReader(stringconnectionString, stringcommandText, CommandType commandType, paramsSQLiteParameter[] cmdParms)
280{
281DbDataReader reader = null;
282if(connectionString == null|| connectionString.Length == 0)
283thrownewArgumentNullException("connectionString");
284if(commandText == null|| commandText.Length == 0)
285thrownewArgumentNullException("commandText");
286
287SQLiteConnection con = newSQLiteConnection(connectionString);
288SQLiteCommand cmd = newSQLiteCommand();
289SQLiteTransaction trans = null;
290PrepareCommand(cmd, con, reftrans, false, commandType, commandText, cmdParms);
291try
292{
293reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
294}
295catch(Exception ex)
296{
297throwex;
298}
299returnreader;
300}
301#endregion
302
303#region ExecuteDataSet
304/// <summary>
305/// 执行数据库查询,返回DataSet对象
306/// </summary>
307/// <param name="connectionString">连接字符串</param>
308/// <param name="cmd">SqlCommand对象</param>
309/// <returns>DataSet对象</returns>
310publicstaticDataSet ExecuteDataSet(stringconnectionString, SQLiteCommand cmd)
311{
312DataSet ds = newDataSet();
313SQLiteConnection con = newSQLiteConnection(connectionString);
314SQLiteTransaction trans = null;
315PrepareCommand(cmd, con, reftrans, false, cmd.CommandType, cmd.CommandText);
316try
317{
318SQLiteDataAdapter sda = newSQLiteDataAdapter(cmd);
319sda.Fill(ds);
320}
321catch(Exception ex)
322{
323throwex;
324}
325finally
326{
327if(cmd.Connection != null)
328{
329if(cmd.Connection.State == ConnectionState.Open)
330{
331cmd.Connection.Close();
332}
333}
334}
335returnds;
336}
337
338/// <summary>
339/// 执行数据库查询,返回DataSet对象
340/// </summary>
341/// <param name="connectionString">连接字符串</param>
342/// <param name="commandText">执行语句或存储过程名</param>
343/// <param name="commandType">执行类型</param>
344/// <returns>DataSet对象</returns>
345publicstaticDataSet ExecuteDataSet(stringconnectionString, stringcommandText, CommandType commandType)
346{
347if(connectionString == null|| connectionString.Length == 0)
348thrownewArgumentNullException("connectionString");
349if(commandText == null|| commandText.Length == 0)
350thrownewArgumentNullException("commandText");
351DataSet ds = newDataSet();
352SQLiteConnection con = newSQLiteConnection(connectionString);
353SQLiteCommand cmd = newSQLiteCommand();
354SQLiteTransaction trans = null;
355PrepareCommand(cmd, con, reftrans, false, commandType, commandText);
356try
357{
358SQLiteDataAdapter sda = newSQLiteDataAdapter(cmd);
359sda.Fill(ds);
360}
361catch(Exception ex)
362{
363throwex;
364}
365finally
366{
367if(con != null)
368{
369if(con.State == ConnectionState.Open)
370{
371con.Close();
372}
373}
374}
375returnds;
376}
377
378/// <summary>
379/// 执行数据库查询,返回DataSet对象
380/// </summary>
381/// <param name="connectionString">连接字符串</param>
382/// <param name="commandText">执行语句或存储过程名</param>
383/// <param name="commandType">执行类型</param>
384/// <param name="cmdParms">SQL参数对象</param>
385/// <returns>DataSet对象</returns>
386publicstaticDataSet ExecuteDataSet(stringconnectionString, stringcommandText, CommandType commandType, paramsSQLiteParameter[] cmdParms)
387{
388if(connectionString == null|| connectionString.Length == 0)
389thrownewArgumentNullException("connectionString");
390if(commandText == null|| commandText.Length == 0)
391thrownewArgumentNullException("commandText");
392DataSet ds = newDataSet();
393SQLiteConnection con = newSQLiteConnection(connectionString);
394SQLiteCommand cmd = newSQLiteCommand();
395SQLiteTransaction trans = null;
396PrepareCommand(cmd, con, reftrans, false, commandType, commandText, cmdParms);
397try
398{
399SQLiteDataAdapter sda = newSQLiteDataAdapter(cmd);
400sda.Fill(ds);
401}
402catch(Exception ex)
403{
404throwex;
405}
406finally
407{
408if(con != null)
409{
410if(con.State == ConnectionState.Open)
411{
412con.Close();
413}
414}
415}
416returnds;
417}
418#endregion
419
420/// <summary>
421/// 通用分页查询方法
422/// </summary>
423/// <param name="connString">连接字符串</param>
424/// <param name="tableName">表名</param>
425/// <param name="strColumns">查询字段名</param>
426/// <param name="strWhere">where条件</param>
427/// <param name="strOrder">排序条件</param>
428/// <param name="pageSize">每页数据数量</param>
429/// <param name="currentIndex">当前页数</param>
430/// <param name="recordOut">数据总量</param>
431/// <returns>DataTable数据表</returns>
432publicstaticDataTable SelectPaging(stringconnString, stringtableName, stringstrColumns, stringstrWhere, stringstrOrder, intpageSize, intcurrentIndex, outintrecordOut)
433{
434DataTable dt = newDataTable();
435recordOut = Convert.ToInt32(ExecuteScalar(connString, "select count(*) from "+ tableName, CommandType.Text));
436stringpagingTemplate = "select {0} from {1} where {2} order by {3} limit {4} offset {5} ";
437intoffsetCount = (currentIndex - 1) * pageSize;
438stringcommandText = String.Format(pagingTemplate, strColumns, tableName, strWhere, strOrder, pageSize.ToString(), offsetCount.ToString());
439using(DbDataReader reader = ExecuteReader(connString, commandText, CommandType.Text))
440{
441if(reader != null)
442{
443dt.Load(reader);
444}
445}
446returndt;
447}
448
449/// <summary>
450/// 预处理Command对象,数据库链接,事务,需要执行的对象,参数等的初始化
451/// </summary>
452/// <param name="cmd">Command对象</param>
453/// <param name="conn">Connection对象</param>
454/// <param name="trans">Transcation对象</param>
455/// <param name="useTrans">是否使用事务</param>
456/// <param name="cmdType">SQL字符串执行类型</param>
457/// <param name="cmdText">SQL Text</param>
458/// <param name="cmdParms">SQLiteParameters to use in the command</param>
459privatestaticvoidPrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, refSQLiteTransaction trans, booluseTrans, CommandType cmdType, stringcmdText, paramsSQLiteParameter[] cmdParms)
460{
461
462if(conn.State != ConnectionState.Open)
463conn.Open();
464
465cmd.Connection = conn;
466cmd.CommandText = cmdText;
467
468if(useTrans)
469{
470trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);
471cmd.Transaction = trans;
472}
473
474
475cmd.CommandType = cmdType;
476
477if(cmdParms != null)
478{
479foreach(SQLiteParameter parm incmdParms)
480cmd.Parameters.Add(parm);
481}
482}
483}
484}

当然你也可以在这里下载:点我下载

PS:大家如果觉得好帮忙点下推荐,谢谢大家了!

作者:kyo-yo
出处:http://kyo-yo.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

免责声明:文章转载自《SQLiteHelperSQLite帮助类》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Idea中添加Typora第三方软件编辑md文件谷歌F12捕获不到登录接口的原因下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Flask之Sqlalchemy

Sqlalchemy 开发文档:https://www.jianshu.com/p/0ad18fdd7eed 创建数据库 安装 pip instal flask-sqlalchemy 两种配置方法 # 两种配置数据库方法 第一种app.config from flask import Flask import pymysql from flask_sq...

关于Java高并发的问题

前言: 对于开发的网站,如果网站的访问量非常大的话,那么就需要考虑相关的并发访问问题了。 一.同步和异步的区别和联系 所谓同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其它的命令。 异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系...

java socket 实现多个一对一聊天

此程序能够实现同一网络下多个一对一聊天,必须服务器先启动 ,然后客户端启动并且服务器ip要填正确,并且每个客户端的自身编号必须唯一。 服务器端: packagecn.com.test09; importjava.io.DataInputStream; importjava.io.DataOutputStream; importjava.io.IOExce...

如何解决线程安全问题

转自:https://www.cnblogs.com/dolphin0520/p/3923737.html 虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据。今天我们就来一起讨论下线程安全问题,以及Java中提供了什么机制来解决线程安全问题。   以下是本文的...

java框架之mybatis

一、简介 1、基本概念 mybatis 是一个半自动轻量级的一个 orm 框架 将 java 与 sql 分离,解决了 jdbc 的硬编码问题; sql 由开发人员控制,更加方便 sql 的修改调优; 2、入门程序 2.1 原始方法:通过 sqlsession 来操作数据库 建一个全局配置文件(mybatis-config.xml),配置数据源等运行...

C#温故而知新学习系列之XML编程—XmlSerializer类把对象序列化为XML文档(五)

  前言    在XMLSerializer类中,包含了把对象序列化为XML文档和把XML文档反序列化为对象的方法,在创建一个类时,只要在该类的属性上加上自定义属性,XMLSerializer就可以读取这些属性,就可以将它们映射成XML元素和属性了   在XMLSerializer类中,把对象序列化为XML文档用Serialize()方法实现,反序列化通过...