数据库Oracle。Oracle的应用,主要在传统行业的数据化业务中,比如:银行、金融这样的对可用性、健壮性、安全性、实时性要求极高的业务MS SQL Server。windows生态系统的产品,好处坏处都很分明。好处就是,高度集...
数据库
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
本文标题为:C# SQLite 数据库
- C#实现批量下载图片到本地示例代码 2023-01-06
- C#线程倒计时器源码分享 2022-12-02
- C#表达式树Expression动态创建表达式 2023-05-11
- Path类 操作文件类的实例 2022-11-24
- Unity实现文本转贴图 2023-04-15
- 自动发布.NET Core Web应用 2023-09-28
- C#中foreach实现原理详解 2022-11-15
- c#语言入门类型和成员 2023-05-11
- C#设计模式之Singleton模式 2023-02-25
- C#使用Socket实现本地多人聊天室 2023-05-17
