数据库sqllit

--------------------------sql语句----------------
--创建
CREATE TABLE Person(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);

--删除名为Person的数据表
DROP TABLE Person;
--向person表插入数据
INSERT INTO Person(ID,NAME,AGE,ADDRESS,SALARY)
VALUES(1,'大强',30,'纽约',200);
INSERT INTO Person(ID,NAME,AGE,ADDRESS,SALARY)
VALUES(2,'光头强',33,'洛杉矶',2000);
INSERT INTO Person(ID,NAME,AGE,ADDRESS,SALARY)
VALUES(3,'小红',21,'旧金山',600) ;
INSERT INTO Person VALUES(4,'小强',23,'旧金山',600) 
--查询表中的所有数据
SELECT*FROM PERSON;
--查询person表中指定的字段
SELECT NAME,SALARY FROM PERSON;
--查询年龄大于等于三十岁的所有人信息
SELECT*FROM PERSON WHERE AGE>=30;
--查询年龄大于等于18岁且工资过千的所有人的信息
SELECT*FROM PERSON WHERE AGE>=18 AND SALARY>=1000;
--查询年龄大于等于25岁或者工资过千的人的名字
SELECT NAME FROM PERSON WHERE AGE>=25 OR SALARY>=1000;
--查询所有住在旧金山的人的信息
SELECT*FROM PERSON WHERE ADDRESS='旧金山';
--查询杰克的薪水
SELECT NAME, SAlARY FROM PERSON WHERE NAME=='小红';
--查询所有薪水不为空的记录
SELECT*FROM PERSON WHERE SALARY IS NOT NULL;
--查询所有年龄是18或30的信息
SELECT*FROM PERSON WHERE AGE=18 OR AGE=30;
SELECT*FROM PERSON WHERE AGE IN(18,30);
SELECT*FROM PERSON WHERE AGE NOT IN(18,30);
--查询所有年龄在18-30之间的信息
SELECT*FROM PERSON WHERE AGE>=18 AND AGE<=30; 
SELECT*FROM PERSON WHERE AGE BETWEEN 18 AND 30;
--查询年龄在20-30之间并且家住旧金山的人物信息
SELECT*FROM PERSON WHERE AGE BETWEEN 20 AND 30 AND  ADDRESS='旧金山';
--查询年龄不在20-30岁之间并且工资低于1000的人物信息
SELECT*FROM PERSON WHERE AGE  NOT IN(18,30) AND  SALARY<1000;

--更新person表格中名字为小强的薪水提升至50000
UPDATE PERSON SET SALARY=50000 WHERE NAME='小强';
--更新名字为小红的人物地址,来到中国薪水提升到100000
UPDATE PERSON SET SALARY=100000,ADDRESS='中国' WHERE NAME='小红';
--将所有薪水低于20000的人涨薪到30000
UPDATE PERSON SET SALARY=30000 WHERE SALARY<20000;
--将所有20-30的人搬来北京
UPDATE PERSON SET ADDRESS='北京' WHERE AGE BETWEEN 20 AND 30;

--删除id为3的信息
DELETE FROM PERSON WHERE ID=3;
--删除所有薪资高于50000的人
DELETE FROM PERSON WHERE SALARY>=50000;
--删除所有
DELETE FROM PERSON;
using System;-------------sql工具类--------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mono.Data.Sqlite;
//如何在unity中使用数据库
//封装一个工具类 负责创建 增删改查等操作
public class SqlLiteDataHelper : MonoBehaviour
{
    //数据库连接定义
    private SqliteConnection dbConnection;
    //SQL命令定义
    private SqliteCommand dbCommand;
    //查询记录数据读取器
    private SqliteDataReader dataReader;
    //构造函数,负责创建数据库的连接
    public SqlLiteDataHelper(string dbName)
    {
        try
        {
            //拼接数据库连接字符串
            string connectionStr = "data source=" + Application.dataPath + "/" + dbName + ".db";
            //构造数据库的连接对象
            dbConnection=new SqliteConnection(connectionStr);
            //打开这个数据库
            dbConnection.Open();
            Debug.Log("数据库打开成功");
        }
        catch (Exception e)
        {
            Debug.LogError("数据库打开失败"+e.Message);
            throw;
        }
    }
    //执行sql语句,使用sql语句字符串
    public SqliteDataReader ExecuteQuery(string querying)
    {
        //创建命令
        dbCommand= dbConnection.CreateCommand();
        //设置执行sql语句
        dbCommand.CommandText = querying;
        //执行命令并返回结果
        dataReader= dbCommand.ExecuteReader();
        return dataReader;
    }
    //关闭数据库连接,释放系统资源
    public void CloseConnection()
    {
        //销毁command
        if (dbCommand!=null)
        {
            dbCommand.Cancel();
            dbCommand = null;
        }
        //销毁reader
        if (dataReader!=null)
        {
            dataReader.Close();
            dataReader = null;
        }
        //销毁connection
        if (dbConnection!=null)
        {
            dbConnection.Close();
            dbConnection = null;
        }
        Debug.Log("数据库已关闭");
    }
}
using System;----------unity中调用sql-----------
using System.Collections;
using System.Collections.Generic;
using Mono.Data.Sqlite;
using UnityEngine;

public class SqllitTest : MonoBehaviour
{
    private SqlLiteDataHelper dataHelper;

    private void Start()
    {
        dataHelper=new SqlLiteDataHelper("HeroDataTestDB");

    }
    //创建数据
    public void CreateTable()
    {
        dataHelper.ExecuteQuery(@"
        CREATE TABLE HERO
        (
        ID INT PRIMARY KEY NOT NULL,
        NAME TEXT NOT NULL,
        ATTACK INT NOT NULL,
        DEFENCE INT NOT NULL);");
    }
    //删除数据
    public void RemoveAllData()
    {
        dataHelper.ExecuteQuery(@"DROP TABLE HERO;");
    }
    //删除指定数据
    public void RemoveData()
    {
        dataHelper.ExecuteQuery(@"DELETE FROM HERO WHERE ID=3;");
    }
    //增加数据
    public void AddData()
    {
         dataHelper.ExecuteQuery(@"
        INSERT INTO Hero(ID,NAME,ATTACK,DEFENCE)VALUES (1,'亚瑟',999,500);
        INSERT INTO Hero(ID,NAME,ATTACK,DEFENCE)VALUES (2,'安琪拉',500,600);
        INSERT INTO Hero(ID,NAME,ATTACK,DEFENCE)VALUES (3,'妲己',600,800);
        INSERT INTO Hero(ID,NAME,ATTACK,DEFENCE)VALUES (4,'赵云',700,200);");
        
    }
    //更改数据
    public void ChangeData()
    {
        dataHelper.ExecuteQuery(@"UPDATE HERO SET ATTACK=10000 WHERE ID==4;");
        
        
        
    }
    //查询数据
    public void FindData()
    {
        dataHelper.ExecuteQuery(@"SELECT*FROM HERO WHERE DEFENCE=600;");
        
    }


}
一、什么是SQLite?

1.SQLite是一款轻型的针对本地化存储的数据库(native database),它是一种关系型数据库管理系统。
(关系型数据库:描述的是游戏中的二维关系映射,本质就是一个二维数组,它包含了字段(属性、特征)以及所有这些数据对象的记录--类的实例对象)
2.SQLite的底层由C语言函数库组成,以嵌入式作为设计目标,在占用资源非常少的情况下实现强大的数据库级的数据存储。
3.SQLite支持Windows/Linux/Unix/Android/IOS等等主流的操作系统,同时能够使用我们熟悉的C、C++、Ruby、Python、C#、PHP、Java等主流编程语言来编写其代码。
4.SQLite是一个以文件形式存在的关系型数据库,作为一个轻量级的嵌入式数据库,它不需要系统提供服务支持,通过SDK直接操作文件就可以了使用了。

二、SQLite的优势
相比较当今主流的数据库存储引擎诸如Oracle、MySQL、SQLServer、DB2、NoSQL、MongoDB等等,SQLite有如下明显的优势:
1.ACID事务
,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性。
2.零配置,即无需安装和管理配置

3.储存在单一磁盘文件中的一个完整的数据库

4.体积非常小,整个数据库引擎大小大致只有4M
多
5.读写效率很高,比大型数据库要快很多
6.独立,没有额外依赖
7.项目源码完全的开源, 你可以将其用于任何商业用途, 包括出售它
8.支持现今所有主流开发语言,如C、C++、PHP、Java、C#、Python等

三、在Unity中使用SQLite
在Unity3D中,SQLite中的功能是以sqlite3.dll即动态链接库的形式提供,因此我们需要将这个文件放置在项目目录下的Plugins文件夹中,此外我们需要System.Data.dll以及Mono.Data.Sqlite.dll这两个文件,将它们也添加到项目的Plugins目录中,因为我们需要的部分数据相关的API或者类都定义在这两个文件当中。
我们使用SQLite需要依赖的三个动态库文件的具体位置如下:
1.sqlite3.dll->官网下载(https://www.sqlite.org/download.html),注意下载64位的不要下载32位的
2.Mono.Data.Sqlite.dll->Unity安装根目录\Editor\Data\Mono\lib\mono\2.0\Mono.Data.Sqlite.dll
3.System.Data.dll->Unity安装根目录\Editor\Data\Mono\lib\mono\2.0\System.Data.dll

四、使用SQLite数据库读写的基本流程:
1.定义数据库连接字符串(ConnectionString)完成数据库连接的构造,建立或者打开一个数据库。(连接字符串ConnectionString = "data source=" + Application.dataPath + "/" + dbName + ".db";
2.定义相关的SQL命令(Command)通过这些命令实现对数据库的增加、删除、更新、读取四种基本功能。
3.在完成各种数据库操作后及时关闭数据库连接,解除对数据库的连接和引用。

五、SQLite基本语法
1.SQLite注释
SQLite注释是附加的注释,可以在SQLite代码中添加注释以增加其可读性,他们可以出现在任何空白处,包括在表达式内和其他SQL语句的中间,但它们不能嵌套。
SQL注释以两个连续的"-"字符开始,直至下一个换行符或直到输入结束
也可以使用C风格的注释,以"/*"开始,直至下一个"*/"字符或直到输入结束

2.SQLite语句
所有的SQLite语句可以以任何关键字开始,如SELECT、INSERT、UPDATE、DELETE、ALTER、DROP等,所有的语句以分号(;)结束。

3.SQLite数据类型
SQLite数据类型是一个用来指定任何对象的数据类型的属性。SQLite中的每一列,每个变量和表达式都有相关的数据类型。我们可以在创建表的同时使用这些数据类型。
SQLite中的数据类型有以下几种:
(1)NULL,值是一个 NULL 值。
(2)INTEGER,值是一个带符号的整数,根据值的大小存储在1、2、3、4、6或8字节中。
(3)REAL,值是一个浮点值,存储为8字节的IEEE浮点数字。
(4)TEXT,值是一个文本字符串,使用UTF-8或UTF-16存储。
(5)BLOB,值是一个blob数据,完全根据它的输入存储。(客户端几乎用不到)
特别需要注意的数据类型:
Bool数据类型
SQLite没有单独的Bool类型。使用整数0(false)和 1(true)来代替bool值。
Date与Time数据类型
SQLite没有单独的日期或时间类型,可以使用TEXT、REAL或 INTEGER来代替。
TEXT表示时间,格式为"YYYY-MM-DD HH:MM:SS.SSS"的日期。
REAL表示时间,从公元前4714年11月24日格林尼治时间的正午开始算起的天数。
INTEGER表示时间,从1970-01-01 00:00:00UTC算起的秒数。

4.SQLite创建表
SQLite的CREATE TABLE语句用于在任何给定的数据库创建一个新表。创建基本表,涉及到命名表、定义列及每一列的数据类型。
CREATE TABLE语句的基本语法如下:
CREATE TABLE database_name.table_name(
   column1 datatype  PRIMARY KEY(one or more columns),
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
);
CREATE TABLE是告诉数据库系统创建一个新表的关键字。CREATE TABLE语句后跟着表的唯一的名称或标识。
实例
下面是一个实例,它创建了一个Item表,ID作为主键,NOT NULL的约束表示在表中创建纪录时这些字段不能为NULL:
CREATE TABLE COMPANY(
   ID 		  INT 	  PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

5.SQLite删除表
SQLite的DROP TABLE语句用来删除表定义及其所有相关数据、索引、触发器、约束和该表的权限规范。使用此命令时要特别注意,因为一旦一个表被删除,表中所有信息也将永远丢失。
DROP TABLE语句的基本语法如下。可以选择指定带有表名的数据库名称,如下所示:
DROP TABLE database_name.table_name;

6.SQLite插入数据
SQLite的INSERT INTO语句用于向数据库的某个表中添加新的数据行。
INSERT INTO 语句基本语法,如下所示:
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]  
VALUES (value1, value2, value3,...valueN);
在这里,column1, column2,...columnN 是要插入数据的表中的列的名称。
如果要为表中的所有列添加值,也可以不指定列名称。即变为如下形式:
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

7.SQLite查询语句
SQLite的SELECT语句用于从SQLite数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。
SQLite的SELECT语句的基本语法如下:
SELECT column1, column2, columnN FROM table_name;
在这里,column1, column2...是表的字段,他们的值是我们想要获取的。如果您想获取所有字段的值,使用如下形式:
SELECT * FROM table_name;

8.SQLite条件子句
SQLite的WHERE子句用于指定从一个表或多个表中获取数据的条件。
如果满足给定的条件,即为真(true)时,则从表中返回特定的值。WHERE子句来过滤记录,只获取需要的记录。
WHERE子句不仅可用在SELECT语句中,也可用在UPDATE、DELETE语句中。
SQLite的带有WHERE子句的SELECT语句的基本语法如下:
SELECT column1, column2, columnN 
FROM table_name
WHERE [condition]
AND运算符允许在一个SQL语句的WHERE子句中的多个条件的存在。使用AND运算符时,只有当所有条件都为真(true)时,整个条件为真(true)。
OR运算符也用于结合一个SQL语句的WHERE子句中的多个条件。使用OR运算符时,只要当条件中任何一个为真(true)时,整个条件为真(true)。

9.SQLite更新语句
SQLite的UPDATE查询用于修改表中已有的记录。可以使用带有WHERE子句的UPDATE查询来更新选定行,否则所有的行都会被更新。
带有WHERE子句的UPDATE查询的基本语法如下:
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
我们可以使用AND或OR运算符来结合N个数量的条件。

10.SQLite删除语句
SQLite的DELETE语句用于删除表中已有的记录。可以使用带有WHERE子句的DELETE查询来删除选定行,否则所有的记录都会被删除。
带有WHERE子句的DELETE查询的基本语法如下:
DELETE FROM table_name
WHERE [condition];
我们可以使用AND或OR运算符来结合N个数量的条件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值