unity中使用本地数据库sqlite

sqlite的安全性没用mySql高,因为sqlite不用创建用户,以及权限设置,sqlite是单机数据库,功能简约,小型化,MySql试用于服务器数据量大功能多需要安装,例如网站访问量比较大的数据管理

其实MySQL与Sqlite中的数据库操作函数基本上都一样,没什么区别,主要区别就是权限和库大小

注意:在使用这个sqlite数据管理时,也要把,几个需要的动态库放到Plugins里面(Mono.Data.Sqlite,   sqlite3,   System.Data)这几个动态库百度都能搜到

1.先新建一个数据库封装类DbAccess

using System;
using System.Collections;
using Mono.Data.Sqlite;
using UnityEngine;

public class DbAccess

{

private SqliteConnection dbConnection;
private SqliteCommand dbCommand;
private SqliteDataReader reader;

public DbAccess (string connectionString)
{

OpenDB (connectionString);

}

//打开数据库
public void OpenDB (string connectionString)

{
try
{
dbConnection = new SqliteConnection (connectionString);

dbConnection.Open ();

Debug.Log ("Connected to db");
}
catch(Exception e)
{
string temp1 = e.ToString();
Debug.Log(temp1);
}

}

//关闭数据库
public void CloseSqlConnection ()
{

if (dbCommand != null)
{

dbCommand.Dispose ();

}

dbCommand = null;

if (reader != null)
{

reader.Dispose ();

}

reader = null;

if (dbConnection != null)
{

dbConnection.Close ();

}

dbConnection = null;

Debug.Log ("Disconnected from db.");

}

//执行SQL语句
public SqliteDataReader ExecuteQuery (string sqlQuery)

{

dbCommand = dbConnection.CreateCommand ();

dbCommand.CommandText = sqlQuery;

reader = dbCommand.ExecuteReader ();

return reader;

}

//查询整个表格
public SqliteDataReader ReadFullTable (string tableName)

{

string query = "SELECT * FROM " + tableName;

return ExecuteQuery (query);

}

//插入函数
public SqliteDataReader InsertInto (string tableName, string[] values)

{

string query = "INSERT INTO " + tableName + " VALUES (" + values[0];

for (int i = 1; i < values.Length; ++i)
{

query += ", " + values[i];

}

query += ")";

return ExecuteQuery (query);

}

//修改表格
public SqliteDataReader UpdateInto (string tableName, string []cols,string []colsvalues,string selectkey,string selectvalue)
{

string query = "UPDATE "+tableName+" SET "+cols[0]+" = "+colsvalues[0];

for (int i = 1; i < colsvalues.Length; ++i)
{

query += ", " +cols[i]+" ="+ colsvalues[i];
}

query += " WHERE "+selectkey+" = "+selectvalue+" ";

return ExecuteQuery (query);
}

//删除表格元组
public SqliteDataReader Delete(string tableName,string []cols,string []colsvalues)
{
string query = "DELETE FROM "+tableName + " WHERE " +cols[0] +" = " + colsvalues[0];

for (int i = 1; i < colsvalues.Length; ++i) {

query += " or " +cols[i]+" = "+ colsvalues[i];
}
Debug.Log(query);
return ExecuteQuery (query);
}

//特定插入元组
public SqliteDataReader InsertIntoSpecific (string tableName, string[] cols, string[] values)

{

if (cols.Length != values.Length) {

throw new SqliteException ("columns.Length != values.Length");

}

string query = "INSERT INTO " + tableName + "(" + cols[0];

for (int i = 1; i < cols.Length; ++i) {

query += ", " + cols[i];

}

query += ") VALUES (" + values[0];

for (int i = 1; i < values.Length; ++i) {

query += ", " + values[i];

}

query += ")";

return ExecuteQuery (query);

}

//整个表格内容删除
public SqliteDataReader DeleteContents (string tableName)

{

string query = "DELETE FROM " + tableName;

return ExecuteQuery (query);

}

//创建表格
public SqliteDataReader CreateTable (string name, string[] col, string[] colType)

{

if (col.Length != colType.Length) {

throw new SqliteException ("columns.Length != colType.Length");

}

string query = "CREATE TABLE " + name + " (" + col[0] + " " + colType[0];

for (int i = 1; i < col.Length; ++i) {

query += ", " + col[i] + " " + colType[i];

}

query += ")";

return ExecuteQuery (query);

}

//根据条件查询
public SqliteDataReader SelectWhere (string tableName, string[] items, string[] col, string[] operation, string[] values)

{

if (col.Length != operation.Length || operation.Length != values.Length) {

throw new SqliteException ("col.Length != operation.Length != values.Length");

}

string query = "SELECT " + items[0];

for (int i = 1; i < items.Length; ++i) {

query += ", " + items[i];

}

query += " FROM " + tableName + " WHERE " + col[0] + operation[0] + "‘" + values[0] + "‘ ";

for (int i = 1; i < col.Length; ++i) {

query += " AND " + col[i] + operation[i] + "‘" + values[0] + "‘ ";

}

return ExecuteQuery (query);

}

}

2.下面新建一个类用来对数据哭进行操作,这个脚本挂在一个激活的gameobject上就可以了

using UnityEngine;
using System.Collections;
using Mono.Data.Sqlite;

public class Test : MonoBehaviour
{

void Start()
{
//数据库文件存储地址
string appDBPath = Application.dataPath + "/MZ.db";

DbAccess db = new DbAccess(@"Data Source=" + appDBPath);
path = appDBPath;

if(!System.IO.File.Exists(@"Data Source=" + appDBPath))
{
//创建表格
db.CreateTable("CQ", new string[] { "name", "qq", "email", "blog" }, new string[] { "text", "text", "text", "text" });
}

//插入数据
db.InsertInto("CQ",new string[] {"‘XQ‘", "‘520520‘", "‘[email protected]‘", "‘www.blog1.com‘"});
db.InsertInto("CQ", new string[] { "‘XX‘", "‘552200‘", "‘[email protected]‘", "‘www.blog2.com‘" });
db.InsertInto("CQ", new string[] { "‘XQ‘", "‘520520‘", "‘[email protected]‘", "‘www.blog3.com‘" });
//删除数据
db.Delete("CQ", new string[] { "email", "email" }, new string[] { "‘[email protected]‘", "‘[email protected]‘" });

using (SqliteDataReader sqReader = db.SelectWhere("CQ", new string[] { "name", "email" }, new string[] { "qq" }, new string[] { "=" }, new string[] { "520520" }))
{
while (sqReader.Read())
{
//目前中文无法显示
Debug.Log("CQ" + sqReader.GetString(sqReader.GetOrdinal("name")));

Debug.Log("CQ" + sqReader.GetString(sqReader.GetOrdinal("email")));

}

sqReader.Close();
}

db.CloseSqlConnection();
}

}

时间: 2024-10-01 04:41:12

unity中使用本地数据库sqlite的相关文章

android listview级联三菜单选择地区,本地数据库sqlite级联地区,item选中不变色

前言:因为找了N多网上的资源都没有好的解决方案,别人都是只给思路没给具体源码,真TMD纠结,干嘛求别人,自己动手才是真,最痛恨那些所谓大牛的作风,给了点点代码就让别人去想,你让我们这种小白情何于堪!!!!!!此例是基于listview来实现本地sqlite实现的! 二话不说,程序猿求的是有图有真相有源码!大家下载后有什么问题可以找到本人:QQ508181017 核心代码如下 1.数据库操作类 package com.icq.demo.db; import java.util.ArrayList;

轻量级本地数据库SQLite在WinRT的使用

开发环境:Windows 8.1 开发工具:Visual Studio Express 2013 for Windows SQLite数据库介绍 1.SQLite是一款轻型的嵌入式数据库,使用C++开发,使用非常广泛 2.SQLite是一款跨平台的数据库,支持Windows.Linux.Android.IOS.Windows Phone系统 3.在Windows Phone中的SQLite是一个非托管组件 4.可以在Windows运行时中使用,也可以在C#项目中使用 5.在C#项目中需要通过Wi

Unity中对SQL数据库的操作

在Unity中,我们有时候需要连接数据库来达到数据的读取与储存.而在.NET平台下,ADO.NET为我们提供了公开数据访问服务的类.客户端应用程序可以使用ADO.NET来连接到数据源,并查询,添加,删除和更新所包含的数据. 对于ADO.NET,需要了解到Connection,Command,DataReader,DataAdapter,DataSet这几个对象,他们是操作数据库的重要对象.下面简要得介绍下这几个对象的作用以及功能(以SQL为例). 1.Connection:它是建立应用程序与数据

Xamarin.Forms&lt;五&gt; Android的本地数据库SQLite

1.准备工作:在项目的“管理NuGet程序包”中安装“SQLite.Net PCL”和“SQLite.Net PCL - XamarinAndroid Platform”在引用中“添加引用”添加SQLite.Net.dll以及SQLite.Net.Platform.XamarinAndroid.dll. 2.在Common项目的Tables文件夹下创建映射类(SQLite表),这个类的结构完全是对应到SQLite数据库中的表.创建一个名为t_Custom表 1 public class t_Cu

QT 创建本地数据库(SQLite数据库)存储数据

注意:QT自带SQLITE数据库,不需要再安装 1.创建一个包含创建.查询.修改和删除数据库的数据库类(DataBase) DataBase.h头文件 #pragma once #include <QObject> #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> #include <QtSql/QSqlDriver> #include <QtSql/QSqlError> #incl

Unity连接本地数据库sqlite

首先要创建一个sqlite的数据库,记住文件地址,拷贝到Assets目录下,创建的数据库文件后缀为.sqlite.具体创建方法百度sqlite 然后百度Mono.Data.Sqlite,这是一个dll文件,下载下来,同样需要放到Assets目录下 接下来创建c#脚本,using UnityEngine;using System.Collections;using Mono.Data.Sqlite;using System.IO; public class SQLiteDemo : MonoBeh

关于Unity中的本地存储

本地存储 在做游戏的时候,经常需要在本机存储一些数据,比如闯关类游戏要记录闯到第几关,做单机的时候要把数据保存到本地,下次启动的时候数据存在,就是把数据保存到磁盘里面或者手机的flash闪存里面. Unity使用PlayerPrefs类实现本地存储 1: PlayerPrefs类: 游戏开发中需要存储本地数据,借助这个能够实现本地存储;2: PlayerPrefs主要方法: (1) SetInt/SetFloat, SetString: key-->value  存整数/存浮点/存字符串 (2)

android 本地数据库sqlite的封装

单机android   sqlite数据库的实现,这个数据库可与程序一起生成在安装包中 一.下载sqlite3.exe文件 二.运行 cmd 转到sqlite3.exe 所在目录  运行 sqlite3.exe 数据库名.db     然后会出现sqlite>的命令提示符 输入创建表的语句, create table 表名('列','列'...):(注意: 要在结束部分加  分号 )     此时会在sqlite3.exe 所在目录,出现所建数据库的文件 三.如果想在Android中运行的话,需

向SQL Server中附加本地数据库报错:附加数据库时出错。有关详细信息,请单击&quot;消息&quot;列中的超链接。

报错现象: 使用SQL Server附加报错:(使用visual连接也会报错:无法打开物理文件***试为文件附加自动命令的数据库,但失败.已存在同名的数据库) 问题分析: 这是由于权限不够所导致的 解决办法: 1.打开数据库文件夹的属性,具体操作流程如图所示 2.问题解决 原文地址:https://www.cnblogs.com/litstar/p/12590982.html