2.18 数据库进阶

数据库进阶
1,实现方法:
1,链接数据库
2,通过SQL语句查询数据.
3, 通过表名查询全表数据
...
4,关闭数据连接,释放资源
2,方法:
public class DataBase {
private DataBase()
{

}
private static DataBase instance;
public static DataBase Instance()
{
if (instance == null)
{
instance = new DataBase();
}
return instance;
}
//数据库链接对象
SqliteConnection connection = null;

//1,通过路径链接数据库
public void ConnectToDB(string path)
{
//考虑多平台
path = "data source=" + path;
if (connection == null)
{
connection = new SqliteConnection(path);
}
else
{
Debug.Log("已经链接了");
}
}
//2,打开数据库
private void OpenDB()
{
if (connection==null)
{
Debug.Log("数据库没有链接上");
return;
}
try
{
connection.Open();
}
catch (System.Exception exp)
{
Debug.Log(exp);
//throw;
}
}

//3,关闭数据库
private void CloseDB()
{
if (connection == null)
{
Debug.Log("数据库没有链接上");
return;
}
try
{
connection.Close();
}
catch (System.Exception exp)
{
Debug.Log(exp);
//throw;
}
}

//4,提供非查询操作
public void ExecuteNonQuery(string sql)
{
OpenDB();
SqliteCommand cmd = connection.CreateCommand();
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
cmd.Dispose();
cmd = null;
CloseDB();
}
//5,提供查询操作
public List<ArrayList> ExecuteQuery(string sql)
{
OpenDB();
SqliteCommand cmd = connection.CreateCommand();
cmd.CommandText = sql;
List<ArrayList> list = new List<ArrayList>();
try
{
SqliteDataReader reader= cmd.ExecuteReader();
while (reader.Read())
{
ArrayList arr = new ArrayList();
for (int i = 0; i < reader.FieldCount; i++)
{
arr.Add(reader.GetValue(i));
}
list.Add(arr);
}
}
catch (System.Exception exp)
{
Debug.Log(exp);
//throw;
}
CloseDB();
return list;
}
//..建表

public List<ArrayList> ExcuteQueryByTableField(string table, string[] field)
{
string sql = "select " + field[0];
if (field.Length>1)
{
for (int i = 1; i < field.Length; i++)
{
sql += "," + field[i];
}
}
sql += " from " + table;
List<ArrayList> list = ExecuteQuery(sql);
return list;

}

public List<ArrayList> ExecuteQueryBySomeThing(string table, string[] col, string[] conditions,string[] compare)
{
//select * from student
string sql = "select * from " + table +" where "+col[0]+compare[0]+conditions[0];
if (col.Length>1)
{
for (int i = 1; i < col.Length; i++)
{
sql += " and " + col[i] + compare[i] + conditions[i];
}
}
Debug.Log(sql);
return ExecuteQuery(sql);

}

//根据名字查询某张表里的数据(不包含name字段的数据)
public float[] ExecuteByTable(string table,string name)
{
string sql = "select * from " + table + " where name='" + name + "'";
List<ArrayList> list= ExecuteQuery(sql);
ArrayList array= list[0];
//注意Name不要
float[] data = new float[array.Count - 1];
for (int i =1; i < array.Count; i++)
{
data[i - 1] =float.Parse(array[i].ToString());
}
return data;
}
}

3,不同平台下选择不同的存储路径
1,Application.dataPath 直接使用进行操作,移动端没有访问权限
2,Application.streamingAssetsPath 直接使用来读取文件,在PC/MAC电脑中可实现对文件的"增删查改"
3,Application.persistentDataPath 使用Application.persistentDataPath来操作文件.该文件存在手机沙盒中,因此不能直接存放.
a,通过服务器直接下载保存到该位置.
b,没有服务器,只有间接通过文件流的方式从本地读取并写入Application.persistentDataPath ,然后再通过Application.persistentDataPath 来读取操作.
4,应用程序发布到PC或者移动平台
1,Android
发布到Android端需要添加libsqlite3.so文件,和相应的 Mono.Data.Sqlite.dll、sqlite3.dll、System.Data.dll类库
注意: 所有文件放到Plugins文件夹下,libsqlite3.so放在Android文件夹下
准备:把本地数据库放在Plugins ->Android ->assets
模板:
//如果运行在编辑器中
#if UNITY_EDITOR
//通过路径找到本地数据库
string dbPath = Application.dataPath + "/Plugins/Android/assets/" + "User.sqlite";
//获取DataBase对象
DataBase db = new DataBase("data source="+dbPath);
//如果运行在Android设备中
#elif UNITY_ANDROID
//将本地数据库拷贝至Android可找到的地方
string dbPath = Application.persistentDataPath +"/User.sqlite";
//如果已知路径没有地方放数据库,那么我们从Unity中拷贝
if(!File.Exists(dbPath))
{
//用www先从Unity中下载到数据库
WWW dbBytes = new WWW("jar:file://" + Application.dataPath + "!/assets/" + "User.sqlite");
//拷贝至规定的地方
File.WriteAllBytes(dbPath, dbBytes.bytes);
//获取DataBase对象
DataBase db = new DataBase("uri=file:"+dbPath);
#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值