SQLite做为一个本地文件数据库至关好用,小巧、快速、支持事务、关系型,甚至能够运行在Android上。在好久之前的一个项目中,咱们用过它来将接收到的数据作本地统计,数据量很大,甚至于咱们想本身搞个内存空间专门作缓存,缓存满后再一点点地往SQLite中移,如今看起来是多余的,这也不符合开发的过程。在开发中,应该先把功能作出来,若是有性能问题,再找出解决方法。直接在SQLite中作插入而不是先在内存中作,它的效率已经达到了要求。java
如今跟你们分享一个对SQLite操做的帮助类,使用它能够对本地SQLite数据库进行方便的操做。sql
若有引用,注意写明转自:http://www.cnblogs.com/wgp13x/p/3868916.html数据库
1 using System; 2 using System.Data.SQLite; 3 using System.Data; 4 using System.Data.Common; 5 6 namespace DXPlatformClientFramework.UC.StatAnalyzeCommon 7 { 8 public class SqliteHelper : IDisposable 9 { 10 public SQLiteConnection conn; 11 12 public void Dispose() 13 { 14 Dispose(true); 15 GC.SuppressFinalize(this); 16 } 17 18 protected virtual void Dispose(bool disposing) 19 { 20 if(disposing) 21 if(conn != null) 22 { 23 conn.Dispose(); 24 conn = null; 25 } 26 } 27 28 ~SqliteHelper() 29 { 30 Dispose(false); 31 } 32 33 /// <summary> 34 /// 构造函数。 35 /// </summary> 36 /// <param name="dataBaseName">数据库名</param> 37 public SqliteHelper(string dataBaseName) 38 { 39 string connString = string.Format(@"Data Source={0}", dataBaseName); 40 conn = new SQLiteConnection(connString); 41 conn.Open(); 42 } 43 44 /// <summary> 45 /// 手动打开数据库。 46 /// </summary> 47 public void SqliteOpen() 48 { 49 if(conn != null && conn.State == ConnectionState.Closed) 50 conn.Open(); 51 } 52 53 /// <summary> 54 /// 经过执行SQL语句,获取表中数据。 55 /// </summary> 56 /// <param name="sError">错误信息</param> 57 /// <param name="sSQL">执行的SQL语句</param> 58 public DataTable GetDataTable(out string sError, string sSQL) 59 { 60 DataTable dt = null; 61 sError = string.Empty; 62 try 63 { 64 SQLiteCommand cmd = newSQLiteCommand() { CommandText = sSQL, Connection = conn }; 65 SQLiteDataAdapter dao = newSQLiteDataAdapter(cmd); 66 dt = newDataTable(); 67 dao.Fill(dt); 68 } 69 catch(Exception e) 70 { 71 sError = e.Message; 72 } 73 return dt; 74 } 75 76 /// <summary> 77 /// 经过执行SQL语句,获取表中数据个数。 78 /// </summary> 79 /// <param name="sError">错误信息</param> 80 /// <param name="sSQL">执行的SQL语句</param> 81 public int GetDataCount(out string sError, string sSQL) 82 { 83 DataTable dt = newDataTable(); 84 sError = string.Empty; 85 SQLiteCommand cmd = newSQLiteCommand() { CommandText = sSQL, Connection = conn }; 86 try 87 { 88 SQLiteDataAdapter dao = new SQLiteDataAdapter(cmd); 89 dao.Fill(dt); 90 cmd.Dispose(); 91 } 92 catch(Exception e) 93 { 94 sError = e.Message; 95 } 96 finally{ cmd.Dispose(); } 97 return int.Parse(dt.Rows[0][0].ToString()); 98 } 99 100 /// <summary> 101 /// 经过执行SQL语句,执行insert,update,delete 动做,也可使用事务。 102 /// </summary> 103 /// <param name="sError">错误信息</param> 104 /// <param name="sSQL">执行的SQL语句</param> 105 /// <param name="bUseTransaction">是否使用事务</param> 106 public bool UpdateData(out string sError, string sSQL, bool bUseTransaction=false) 108 { 109 bool iResult = false; 110 sError = string.Empty; 111 if(!bUseTransaction) 112 { 113 try 114 { 115 SQLiteCommand comm = new SQLiteCommand(conn) { CommandText = sSQL }; 116 iResult = comm.ExecuteNonQuery()>0; 117 comm.Dispose(); 118 } 119 catch(Exception ex) 120 { 121 sError = ex.Message; 122 } 123 } 124 else// 使用事务 125 { 126 DbTransaction trans = null; 127 trans = conn.BeginTransaction(); 128 SQLiteCommand comm = new SQLiteCommand(conn) { CommandText = sSQL }; 129 try 130 { 131 iResult = comm.ExecuteNonQuery()>0; 132 trans.Commit(); 133 } 134 catch(Exception ex) 135 { 136 sError = ex.Message; 137 iResult = false; 138 trans.Rollback(); 139 } 140 finally{comm.Dispose();trans.Dispose();} 141 } 142 return iResult; 143 } 144 145 /// <summary> 146 /// 使用事务执行多条相同的带参数的SQL语句。 147 /// </summary> 148 /// <param name="sqlString">SQL语句</param> 149 /// <param name="sqLiteParameters">每次SQL执行的参数</param> 150 public void ExecuteSqlTran(string sqlString, object[][] sqLiteParameters) 151 { 152 if(sqLiteParameters.Length == 0) 153 return; 154 using(DbTransaction trans = conn.BeginTransaction()) 155 { 156 if(conn.State != ConnectionState.Open) 157 conn.Open(); 158 SQLiteCommand cmd = conn.CreateCommand(); 159 cmd.Connection = conn; 160 try 161 { 162 for(inti = 0; i < sqLiteParameters[0].Length; i++) 163 { 164 cmd.Parameters.Add(cmd.CreateParameter()); 165 } 166 //循环 167 foreach(object[] sqlParameters insqLiteParameters) 168 { 169 ExecuteSqlNonQuery(cmd, sqlString, sqlParameters); 170 } 171 trans.Commit(); 172 } 173 catch(Exception ex) 174 { 175 trans.Rollback(); 176 throw; 177 } 178 finally 179 { 180 cmd.Dispose();trans.Dispose(); 181 } 182 } 183 } 184 185 /// <summary> 186 /// 不使用事务执行一条带参数的SQL语句。 187 /// </summary> 188 /// <param name="sqlString">SQL语句</param> 189 /// <param name="sqLiteParameters">SQL执行的参数</param> 190 public void ExecuteSql(string sqlString, object[] sqLiteParameters) 191 { 192 if(conn.State != ConnectionState.Open) 193 conn.Open(); 194 SQLiteCommand cmd = conn.CreateCommand(); 195 cmd.Connection = conn; 196 cmd.CommandText = sqlString; 197 try 198 { 199 for(inti = 0; i < sqLiteParameters.Length; i++) 200 { 201 cmd.Parameters.Add(cmd.CreateParameter()); 202 cmd.Parameters[i].Value = sqLiteParameters[i]; 203 } 204 cmd.ExecuteNonQuery(); 205 } 206 finally 207 { 208 cmd.Dispose(); 209 } 210 } 211 212 private void ExecuteSqlNonQuery(SQLiteCommand cmd, string cmdText, object[] cmdParms) 214 { 215 cmd.CommandText = cmdText; 216 if(cmdParms != null) 217 { 218 for(inti = 0; i < cmdParms.Length; i++ ) 219 { 220 cmd.Parameters[i].Value = cmdParms[i]; 221 } 222 } 223 cmd.ExecuteNonQuery(); 224 } 225 } 226 }