C# SQLite 数据库

数据库

Oracle。Oracle的应用,主要在传统行业的数据化业务中,比如:银行、金融这样的对可用性、健壮性、安全性、实时性要求极高的业务

MS SQL Server。windows生态系统的产品,好处坏处都很分明。好处就是,高度集成化,微软也提供了整套的软件方案,基本上一套win系统装下来就齐活了。因此,不那么缺钱,但很缺IT人才的中小企业,会偏爱 MS SQL Server 。例如,自建ERP系统、商业智能、垂直领域零售商、餐饮、事业单位等等。

MySQL。MySQL基本是生于互联网,长于互联网。其应用实例也大都集中于互联网方向

SQLite介绍

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 C#、PHP、Java等,还有ODBC接口。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头。

Windows平台使用

1、在Assets目录下创建Plugins目录,将Mono.Data.Sqlite.dll、System.Data.dll、sqlite3.dll三个文件放到工程Plugins目录下。

2、在Assets目录下创建StreamingAssets目录,把db放在该目录内。

3、将DbAccess.cs脚本添加到工程中

Android平台使用

1、在Assets目录下创建Plugins目录,将Mono.Data.Sqlite.dll、System.Data.dll、sqlite3.dll三个文件放到工程Plugins目录下。

2、然后在Plugins目录下建立Android目录,再将libsqlite3.so放到Android目录下。

3、在Assets目录下创建StreamingAssets目录,把db放在该目录内。 4、将DbAccess.cs脚本添加到工程中。

 

 SQLite的数据库常规操作封装的通用类

  1 using UnityEngine;
  2 using System;
  3 using System.Collections;
  4 using Mono.Data.Sqlite;
  5 /// <summary>
  6 /// SQLite数据库操作类
  7 /// </summary>
  8 public class DbAccess
  9 {
 10     private SqliteConnection conn; // SQLite连接
 11     private SqliteCommand cmd; // SQLite命令
 12     private SqliteDataReader reader;
 13     public DbAccess (string connectionString)    
 14     {
 15         OpenDB (connectionString);
 16     }
 17     public DbAccess (){ }
 18     /// <summary>
 19     /// 打开数据库
 20     /// </summary>
 21     /// <param name="connectionString"></param>
 22     public void OpenDB (string connectionString)        
 23     {
 24         try
 25         {
 26             conn = new SqliteConnection (connectionString);            
 27             conn.Open ();            
 28             Debug.Log ("Connected to db,连接数据库成功!");
 29         }
 30         catch(Exception e)
 31         {
 32             string temp1 = e.ToString();
 33             Debug.Log(temp1);
 34         }        
 35     }
 36     /// <summary>
 37     /// 关闭数据库连接
 38     /// </summary>
 39     public void CloseSqlConnection ()    
 40     {
 41         if (cmd != null) { cmd.Dispose (); cmd = null; }                        
 42         if (reader != null) { reader.Dispose (); reader = null;}                    
 43         if (conn != null) {    conn.Close (); conn = null;}            
 44         Debug.Log ("Disconnected from db.关闭数据库!");    
 45     }    
 46     /// <summary>
 47     /// 执行SQL语句
 48     /// </summary>
 49     /// <param name="sqlQuery"></param>
 50     /// <returns></returns>
 51     public SqliteDataReader ExecuteQuery ( string sqlQuery )        
 52     {
 53         Debug.Log( "ExecuteQuery:: " + sqlQuery );
 54         cmd = conn.CreateCommand ();
 55         cmd.CommandText = sqlQuery;
 56         reader = cmd.ExecuteReader ();
 57         return reader;
 58     }
 59     
 60     /// <summary>
 61     /// 查询表中全部数据 param tableName=表名 
 62     /// </summary>
 63     public SqliteDataReader ReadFullTable (string tableName)        
 64     {
 65         string query = "SELECT * FROM " + tableName;
 66         return ExecuteQuery (query);
 67     }
 68     /// <summary>
 69     /// 插入数据 param tableName=表名 values=插入数据内容
 70     /// </summary>
 71     public SqliteDataReader InsertInto (string tableName, string[] values)        
 72     {
 73         string query = "INSERT INTO " + tableName + " VALUES (" + values[0];
 74         for (int i = 1; i < values.Length; ++i) {    
 75             query += ", " + values[i];    
 76         }
 77         query += ")";
 78         return ExecuteQuery (query);
 79     }    
 80     /// <summary>
 81     /// 更新数据 param tableName=表名 cols=更新字段 colsvalues=更新内容 selectkey=查找字段(主键) selectvalue=查找内容
 82     /// </summary>
 83     public SqliteDataReader UpdateInto (string tableName, string []cols,string []colsvalues,string selectkey,string selectvalue)
 84     {
 85         string query = "UPDATE "+tableName+" SET "+cols[0]+" = "+colsvalues[0];
 86         for (int i = 1; i < colsvalues.Length; ++i) {
 87             query += ", " +cols[i]+" ="+ colsvalues[i];
 88         }        
 89         query += " WHERE "+selectkey+" = "+selectvalue+" ";        
 90         return ExecuteQuery (query);
 91     }
 92     
 93     /// <summary>
 94     /// 删除数据 param tableName=表名 cols=字段 colsvalues=内容
 95     /// </summary>
 96     public SqliteDataReader Delete(string tableName,string []cols,string []colsvalues)
 97     {
 98         string query = "DELETE FROM "+tableName + " WHERE " +cols[0] +" = " + colsvalues[0];        
 99         for (int i = 1; i < colsvalues.Length; ++i) {            
100             query += " or " +cols[i]+" = "+ colsvalues[i];
101         }
102         return ExecuteQuery (query);
103     }    
104     /// <summary>
105     /// 插入数据 param tableName=表名 cols=插入字段 value=插入内容
106     /// </summary>
107     public SqliteDataReader InsertIntoSpecific (string tableName, string[] cols, string[] values)        
108     {
109         if (cols.Length != values.Length) {    
110             throw new SqliteException ("columns.Length != values.Length");
111         }
112         string query = "INSERT INTO " + tableName + "(" + cols[0];
113         for (int i = 1; i < cols.Length; ++i) {    
114             query += ", " + cols[i];    
115         }
116         query += ") VALUES (" + values[0];
117         for (int i = 1; i < values.Length; ++i) {    
118             query += ", " + values[i];    
119         }        
120         query += ")";        
121         return ExecuteQuery (query);        
122     }
123     /// <summary>
124     /// 删除表中全部数据
125     /// </summary>
126     public SqliteDataReader DeleteContents (string tableName)        
127     {    
128         string query = "DELETE FROM " + tableName;
129         return ExecuteQuery (query);
130     }
131     /// <summary>
132     /// 创建表 param name=表名 col=字段名 colType=字段类型
133     /// </summary>
134     public SqliteDataReader CreateTable (string name, string[] col, string[] colType)
135     {
136         if (col.Length != colType.Length) {
137             throw new SqliteException ("columns.Length != colType.Length");
138         }
139         string query = "CREATE TABLE " + name + " (" + col[0] + " " + colType[0];        
140         for (int i = 1; i < col.Length; ++i) {    
141             query += ", " + col[i] + " " + colType[i];    
142         }
143         query += ")";        
144         return ExecuteQuery (query);        
145     }
146     /// <summary>
147     /// 按条件查询数据 param tableName=表名 items=查询字段 col=查找字段 operation=运算符 values=内容
148     /// </summary>
149     public SqliteDataReader SelectWhere (string tableName, string[] items, string[] col, string[] operation, string[] values)    
150     {    
151         if (col.Length != operation.Length || operation.Length != values.Length) {    
152             throw new SqliteException ("col.Length != operation.Length != values.Length");    
153         }
154         string query = "SELECT " + items[0];
155         for (int i = 1; i < items.Length; ++i) {    
156             query += ", " + items[i];
157         }
158         query += " FROM " + tableName + " WHERE " + col[0] + operation[0] + "'" + values[0] + "' ";
159         for (int i = 1; i < col.Length; ++i) {
160             query += " AND " + col[i] + operation[i] + "'" + values[i] + "' ";
161         }
162         return ExecuteQuery (query);
163     }
164     /// <summary>
165     /// 查询表
166     /// </summary>
167     public SqliteDataReader Select(string tableName, string col, string values)
168     {
169         string query = "SELECT * FROM " + tableName  + " WHERE " + col + " = " + values;
170         return ExecuteQuery (query);
171     }
172     public SqliteDataReader Select(string tableName, string col,string operation, string values)
173     {
174         string query = "SELECT * FROM " + tableName  + " WHERE " + col + operation + values;
175         return ExecuteQuery (query);
176     }
177     /// <summary>
178     /// 升序查询
179     /// </summary>
180     public SqliteDataReader SelectOrderASC (string tableName,string col)
181     {
182         string query = "SELECT * FROM " + tableName  + " ORDER BY " + col + " ASC";
183         return ExecuteQuery (query);
184     }
185     /// <summary>
186     /// 降序查询
187     /// </summary>
188     public SqliteDataReader SelectOrderDESC (string tableName,string col)
189     {
190         string query = "SELECT * FROM " + tableName  + " ORDER BY " + col + " DESC";
191         return ExecuteQuery (query);
192     }
193     /// <summary>
194     /// 查询表行数
195     /// </summary>
196     public SqliteDataReader SelectCount(string tableName)
197     {
198         string query = "SELECT COUNT(*) FROM " + tableName;
199         return ExecuteQuery (query);
200     }
201 }
DbAccess
 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 using Mono .Data .Sqlite;
 5 
 6 namespace ns
 7 {
 8     /// <summary>
 9     ///  打开和关闭数据库
10     /// </summary>
11     public class SQLiteHelper : MonoBehaviour 
12     {
13         protected string dbName = "test2.db"; // 文件名
14         private string filePath // 文件路径
15         {
16             get { return Application .streamingAssetsPath + "/" + dbName; }
17         }
18 
19         protected DbAccess db; // dbAccess实例
20         protected SqliteDataReader reader;// 
21         /// <summary>
22         /// 打开数据库
23         /// </summary>
24         protected void OpenDB()
25         {
26             db = new DbAccess( "URI=file:" + filePath );
27         }
28         /// <summary>
29         /// 关闭数据库
30         /// </summary>
31         protected void CloseDB()
32         {
33             if( reader != null )
34             {
35                 reader .Close();
36                 reader = null;
37             }
38             
39             db .CloseSqlConnection();
40         }
41         /// <summary>
42         /// 对象前后添加单引号
43         /// </summary>
44         /// <param name="o"></param>
45         /// <returns></returns>
46         protected string GetStr( object o )
47         {
48             return "'" + o + "'";
49         }
50 
51     }
52 }
SQLiteHelper
  1 using System.Collections;
  2 using System.Collections.Generic;
  3 using UnityEngine;
  4 using ns;
  5 
  6 public class MySQLiteDemo : MySQLiteHelper
  7 {
  8     /// <summary>
  9     /// 创建表
 10     /// </summary>
 11     private void CreateTable()
 12     {
 13         //打开数据库
 14         OpenDB();
 15 
 16         db.CreateTable("MyRole", new string[] { "id", "name", "age", "lv", "exp" },
 17             new string[] { "int", "text", "int", "int", "float" });
 18         //关闭数据库
 19         CloseDB();
 20     }
 21 
 22 
 23     /// <summary>
 24     /// 插入数据
 25     /// </summary>
 26     private void InsertData()
 27     {
 28         //打开数据库
 29         OpenDB();
 30         //插入数据库
 31         db.InsertInto
 32             ("MyRole", new string[] { GetStr("1"), GetStr("张三"), GetStr("100"), GetStr("12"), GetStr("120") });
 33         db.InsertInto
 34             ("MyRole", new string[] { GetStr("2"), GetStr("李四"), GetStr("110"), GetStr("13"), GetStr("130") });
 35         db.InsertInto
 36             ("MyRole", new string[] { GetStr("3"), GetStr("王五"), GetStr("120"), GetStr("14"), GetStr("140") });
 37         db.InsertInto
 38             ("MyRole", new string[] { GetStr("4"), GetStr("赵六"), GetStr("130"), GetStr("15"), GetStr("150") });
 39 
 40         //关闭数据库
 41         CloseDB();
 42     }
 43 
 44     /// <summary>
 45     /// 删除数据库
 46     /// </summary>
 47     private void DeleteData()
 48     {
 49         //打开数据库
 50         OpenDB();
 51         // 删除数据: 多个条件直接是或的关系
 52         // DELETE FROM Role WHERE id = 1 or lv = 13
 53 
 54         //db.Delete("MyRole",
 55         //    new string[] { "id", "lv" },
 56         //    new string[] { "1", "130" }
 57         //    );
 58         db.DeleteContents("MyRole");
 59         //关闭数据库
 60 
 61         CloseDB();
 62     }
 63     /// <summary>
 64     /// 更新数据
 65     /// </summary>
 66     private void UpdateData()
 67     {
 68         //打开数据库
 69         OpenDB();
 70         // 更新数据: id为1数据 exp改为350 lv改为16
 71         // UPDATE Role SET exp = 350, lv =16 WHERE id = 1 
 72         db.UpdateInto("MyRole", 
 73             new string[] { "exp", "lv" }, new string[] { "350", "16", }, "id", "1");
 74         //关闭数据库
 75         CloseDB();
 76     }
 77     // 查找数据
 78     private void SearchData()
 79     {
 80         OpenDB();
 81         // 查询 查找id为3 lv为21的数据
 82         // 找到 name 和 age
 83         // 多个条件之间是与的关系
 84         // SELECT name, age FROM Role WHERE id='3'  AND lv='14'
 85         reader = db.SelectWhere("MyRole",
 86             new string[] { "name", "age" },
 87             new string[] { "id", "lv" },
 88             new string[] { "=", "=" },
 89             new string[] { "1", "14" }
 90             );
 91         if (reader.HasRows)
 92         {
 93             reader.Read();
 94             print(reader.GetString(reader.GetOrdinal("name")));
 95             print(reader.GetInt32(reader.GetOrdinal("age")));
 96         }
 97 
 98         CloseDB();
 99     }
100 
101     /// <summary>
102     /// 查找多个数据
103     /// </summary>
104     private void SelectData()
105     {
106        // 打开数据库
107             OpenDB();
108 
109             //reader = db .Select( "Role" , "id" , "2" );// 查询所有id 为 2的数据
110             //reader = db .Select( "Role" , "id" , ">" , "1" ); // 查询所有id>1的数据
111             //reader = db .ReadFullTable("Role"); // 读取整张表 
112             //reader = db .SelectOrderASC( "Role" , "age" ); // age从小到大排列
113             reader = db .SelectOrderDESC( "MyRole" , "lv" ); //  lv从大到小
114             if ( reader.HasRows )
115             {
116                 while( reader .Read() )
117                 {
118                     string s = "";
119                     s += reader .GetInt32( reader .GetOrdinal( "id" ) ) + " , " ;
120                     s += reader .GetString( reader .GetOrdinal( "name" ) ) + " , ";
121                     s += reader .GetInt32( reader .GetOrdinal( "age" ) ) + " , ";
122                     s += reader .GetInt32( reader .GetOrdinal( "lv" ) ) + " , ";
123                     s += reader .GetFloat( reader .GetOrdinal( "exp" ) );
124                     print( s );
125                 }
126             }
127             // 关闭数据库
128             CloseDB();
129     }
130 
131     private void OnGUI()
132     {
133         if (GUILayout.Button("创建MyRole表"))
134         {
135             CreateTable();
136         }
137         if (GUILayout.Button("插入数据"))
138         {
139             InsertData();
140         }
141         if (GUILayout.Button("删除数据库"))
142         {
143             DeleteData();
144         }
145         if (GUILayout.Button("更新数据"))
146         {
147             UpdateData();
148         }
149         if (GUILayout.Button("查询数据"))
150         {
151             SearchData();
152         }
153         if (GUILayout.Button("多条数据查询"))
154         {
155             SelectData();
156         }
157     }
158 
159 
160 }
MySQLiteDemo

 

posted @ 2019-03-11 20:28  NuLiAs  阅读(434)  评论(0编辑  收藏  举报