国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Unity3D教程:與Sqlite數據庫直連

開發 游戲開發
本文將為您介紹Unity 3D如何與Sqlite數據進行連接的過程,操作環境為Windows 7下。

環境介紹:

Windows7,Unity3D,SQLite Expert Personal 3

開發語言:

JavaScript

需要的dll文件:

Mono.Data.Sqlite.dll和sqlite3.dll,dll文件位置,截圖:

Unity3D教程:Unity3D與Sqlite數據庫直連

Unity3D教程:Unity3D與Sqlite數據庫直連

一定要在這個目錄下,請保持一致。

如果需要將編譯好的程序發布成功的話,需要改一些地方,具體見下面的截圖:

Unity3D教程:Unity3D與Sqlite數據庫直連

要改動的地方已用紅色標記,注意這個要改成.NET2.0,這樣才能夠發布的。系統默認的不是.NET2.0,這一點要注意!!!

下面來看下代碼吧,先看下如何創建數據庫的代碼,這一篇代碼是不用掛到任何對象上面去的,你只用把它當成一個工具即可。如下所示:

  1. /*  Javascript class for accessing SQLite objects. 
  2.      To use it, you need to make sure you COPY Mono.Data.SQLiteClient.dll from wherever it lives in your Unity directory 
  3.      to your project's Assets folder 
  4.      Originally created by dklompmaker in 2009 
  5.      http://forum.unity3d.com/threads ... sier-Database-Stuff 
  6.      Modified 2011 by Alan Chatham           */ 
  7. //#pragma strict 
  8. /* 

代碼描述

*本代碼是為了在Windows環境下運行unity3d和Sqlite數據庫而寫的;實現的基本功能是unity3d能夠與數據庫之間進行基本的通信,比如說:在數據庫中的數據被改變了以后,unity3d中得到的數據也會在刷新了之后跟著改變;這只是一個基本的核心的技術,為的是能夠應用在大型的unity3d項目中,能夠存儲場景中的項目的屬性,在需要改變對象的屬性或增加、減少等對象時能夠很方便的用得上。要實現本代碼。首先需要一些dll文件,一個是Mono.Data.SQLiteClient.dll,另外一個是sqlite3.dll,這些文件都能夠在unity3d的安裝目錄中找得到。除此之外,還需要把這兩個文件放在你的項目的這個路徑下面:\Assets\Plugins\,沒有Plugins文件夾就必須創建這個文件夾,然后將這兩個dll文件放在該文件夾寫。當然,如果你想能夠在PC上面發布成可執行文件,還需要改動一些地方。在unity3d中的Play Setting ->Other Setting 中將Api Compatibility的等級改為.NET 2.0;那么這些操作做完了以后,如果你的代碼寫得沒有問題,那么你就可以成功了。

細解釋代碼: 

  1. */ 
  2. import          System.Data;  // we import our  data class 我們先導入我們的數據集 
  3. import          Mono.Data.Sqlite; // we import sqlite        我們導入sqlite數據集,也就是Plugins文件夾下的那個dll文件 
  4. class dbAccess { 
  5.     // variables for basic query access 
  6.     private var connection : String;        //數據庫的連接字符串,用于建立與特定數據源的連接 
  7.     private var dbcon : IDbConnection;        //IDbConnection的連接對象,其實就是一個類對象 
  8.     private var dbcmd : IDbCommand;                //IDbCommand類對象,用來實現操作數據庫的命令:注解:我在網上資料看到的如何實現對數據庫執行命令:                                                  
  9.                     //首先創建一個IDbConnection連接對象,然后將一條數據庫命令賦值給一個字符串,利用這個字符串和連接對象                                                                    
  10.       //就可以創建(new)一個IDbCommand對象了,然后使用提供的方法就可以執行這個命令了。 
  11.     private var reader : IDataReader;        //reader的作用就是讀取結果集的一個或多個只進結果流 
  12.     function OpenDB(p : String){ 
  13.     connection = "URI=file:" + p; // we set the connection to our database 
  14.     dbcon = new SqliteConnection(connection); 
  15.     dbcon.Open();                                                //打開數據庫連接操作 
  16.     } 
  17.     function BasicQuery(q : String, r : boolean){ // run a baic Sqlite query 
  18.         dbcmd = dbcon.CreateCommand(); // create empty command 
  19.         dbcmd.CommandText = q; // fill the command 
  20.         reader = dbcmd.ExecuteReader(); // execute command which returns a reader  返回IDataReader的對象,創建IDataReader的對象 
  21.         if(r){ // if we want to return the reader 
  22.         return reader; // return the reader        返回讀取的對象,就是讀到了什么東西 
  23.         } 
  24.     } 
  25.     // This returns a 2 dimensional ArrayList with all the 
  26.     //  data from the table requested 
  27.     function ReadFullTable(tableName : String){ 
  28.         var query : String; 
  29.         query = "SELECT * FROM " + tableName; 
  30.         dbcmd = dbcon.CreateCommand(); 
  31.         dbcmd.CommandText = query; 
  32.         reader = dbcmd.ExecuteReader(); 
  33.         var readArray = new ArrayList(); 
  34.         while(reader.Read()){ 
  35.             var lineArray = new ArrayList(); 
  36.             for (var i = 0; i < reader.FieldCount; i++) 
  37.                 lineArray.Add(reader.GetValue(i)); // This reads the entries in a row 
  38.             readArray.Add(lineArray); // This makes an array of all the rows 
  39.         } 
  40.         return readArray; // return matches 
  41.     } 
  42.     // This function deletes all the data in the given table.  Forever.  WATCH OUT! Use sparingly, if at all 
  43.     function DeleteTableContents(tableName : String){ 
  44.     var query : String; 
  45.     query = "DELETE FROM " + tableName; 
  46.     dbcmd = dbcon.CreateCommand(); 
  47.     dbcmd.CommandText = query; 
  48.     reader = dbcmd.ExecuteReader(); 
  49.     } 
  50.     function CreateTable(name : String, col : Array, colType : Array){ // Create a table, name, column array, column type array 
  51.         var query : String; 
  52.         query  = "CREATE TABLE " + name + "(" + col[0] + " " + colType[0]; 
  53.         for(var i=1; i<col.length; i++){ 
  54.             query += ", " + col + " " + colType; 
  55.         } 
  56.         query += ")"
  57.         dbcmd = dbcon.CreateCommand(); // create empty command 
  58.         dbcmd.CommandText = query; // fill the command 
  59.         reader = dbcmd.ExecuteReader(); // execute command which returns a reader 
  60.     } 
  61.     function InsertIntoSingle(tableName : String, colName : String, value : String){ // single insert 
  62.         var query : String; 
  63.         query = "INSERT INTO " + tableName + "(" + colName + ") " + "VALUES (" + value + ")"
  64.         dbcmd = dbcon.CreateCommand(); // create empty command 
  65.         dbcmd.CommandText = query; // fill the command 
  66.         reader = dbcmd.ExecuteReader(); // execute command which returns a reader 
  67.     } 
  68.     function InsertIntoSpecific(tableName : String, col : Array, values : Array){ // Specific insert with col and values 
  69.         var query : String; 
  70.         query = "INSERT INTO " + tableName + "(" + col[0]; 
  71.         for(var i=1; i<col.length; i++){ 
  72.             query += ", " + col; 
  73.         } 
  74.         query += ") VALUES (" + values[0]; 
  75.         for(i=1; i<values.length; i++){ 
  76.             query += ", " + values; 
  77.         } 
  78.         query += ")"
  79.         dbcmd = dbcon.CreateCommand(); 
  80.         dbcmd.CommandText = query; 
  81.         reader = dbcmd.ExecuteReader(); 
  82.    } 
  83.     function InsertInto(tableName : String, values : Array){ // basic Insert with just values 
  84.         var query : String; 
  85.         query = "INSERT INTO " + tableName + " VALUES (" + values[0]; 
  86.         for(var i=1; i<values.length; i++){ 
  87.             query += ", " + values; 
  88.         } 
  89.         query += ")"
  90.         dbcmd = dbcon.CreateCommand(); 
  91.         dbcmd.CommandText = query; 
  92.         reader = dbcmd.ExecuteReader(); 
  93.     } 
  94.     // This function reads a single column 
  95.     //  wCol is the WHERE column, wPar is the operator you want to use to compare with, 
  96.     //  and wValue is the value you want to compare against. 
  97.     //  Ex. - SingleSelectWhere("puppies", "breed", "earType", "=", "floppy") 
  98.     //  returns an array of matches from the command: SELECT breed FROM puppies WHERE earType = floppy; 
  99.     function SingleSelectWhere(tableName : String, itemToSelect : String, wCol : String, wPar : String, wValue : String){ // Selects a single Item 
  100.         var query : String; 
  101.         query = "SELECT " + itemToSelect + " FROM " + tableName + " WHERE " + wCol + wPar + wValue;         
  102.         dbcmd = dbcon.CreateCommand(); 
  103.         dbcmd.CommandText = query; 
  104.         reader = dbcmd.ExecuteReader(); 
  105.         var readArray = new Array(); 
  106.         while(reader.Read()){ 
  107.             readArray.Push(reader.GetString(0)); // Fill array with all matches 
  108.         } 
  109.         return readArray; // return matches 
  110.     } 
  111.     function CloseDB(){ 
  112.         reader.Close(); // clean everything up 
  113.         reader = null
  114.         dbcmd.Dispose(); 
  115.         dbcmd = null
  116.         dbcon.Close(); 
  117.         dbcon = null
  118.     } 

7、如何在Unity3D中使用這個數據庫的代碼:

  1. //#pragma strict 
  2. /*  Script for testing out SQLite in Javascript 
  3.           2011 - Alan Chatham 
  4.           Released into the public domain 
  5.         This script is a GUI script - attach it to your main camera. 
  6.  
  7.         It creates/opens a SQLite database, and with the GUI you can read and write to it. 
  8.  
  9.                                         */ 
  10.  
  11. // This is the file path of the database file we want to use 
  12.  
  13. // Right now, it'll load TestDB.sqdb in the project's root folder. 
  14.  
  15. // If one doesn't exist, it will be automatically created. 
  16.  
  17. public var DatabaseName : String = "TestDB.sqdb"
  18.  
  19. // This is the name of the table we want to use 
  20.  
  21. public var TableName : String = "TestTable"
  22.  
  23. var db : dbAccess; 
  24.  
  25. function Start(){ 
  26.  
  27.     // Give ourselves a dbAccess object to work with, and open it 
  28.  
  29.     db = new dbAccess(); 
  30.  
  31.     db.OpenDB(DatabaseName); 
  32.  
  33.     // Let's make sure we've got a table to work with as well! 
  34.  
  35.     var tableName = TableName; 
  36.  
  37.     var columnNames = new Array("firstName","lastName"); 
  38.  
  39.     var columnValues = new Array("text","text"); 
  40.  
  41.     try {db.CreateTable(tableName,columnNames,columnValues); 
  42.  
  43.     } 
  44.  
  45.     catch(e){// Do nothing - our table was already created判斷表是否被創建了 
  46.  
  47.         //- we don't care about the error, we just don't want to see it 
  48.  
  49.     } 
  50.  
  51.  
  52. // These variables just hold info to display in our GUI 
  53.  
  54. var firstName : String = "First Name"
  55.  
  56. var lastName : String = "Last Name"
  57.  
  58. var DatabaseEntryStringWidth = 100; 
  59.  
  60. var scrollPosition : Vector2; 
  61.  
  62. var databaseData : ArrayList = new ArrayList(); 
  63.  
  64. // This GUI provides us with a way to enter data into our database 
  65.  
  66. //  as well as a way to view it 
  67.  
  68. function OnGUI(){ 
  69.  
  70.     GUI.Box(Rect (25,25,Screen.width - 50, Screen.height - 50),"Data"); 
  71.  
  72.     GUILayout.BeginArea(Rect(50, 50, Screen.width - 100, Screen.height - 100)); 
  73.  
  74.     // This first block allows us to enter new entries into our table 
  75.  
  76.         GUILayout.BeginHorizontal(); 
  77.  
  78.             firstName = GUILayout.TextField(firstName, GUILayout.Width (DatabaseEntryStringWidth)); 
  79.  
  80.             lastName = GUILayout.TextField(lastName, GUILayout.Width (DatabaseEntryStringWidth)); 
  81.  
  82.             //lastName = GUILayout.TextField(); 
  83.  
  84.         GUILayout.EndHorizontal(); 
  85.  
  86.         if (GUILayout.Button("Add to database")){ 
  87.  
  88.             // Insert the data 
  89.  
  90.             InsertRow(firstName,lastName); 
  91.  
  92.             // And update the readout of the database 
  93.  
  94.             databaseData = ReadFullTable(); 
  95.  
  96.         } 
  97.  
  98.         // This second block gives us a button that will display/refresh the contents of our database 
  99.  
  100.         GUILayout.BeginHorizontal(); 
  101.  
  102.             if (GUILayout.Button ("Read Database"))         
  103.  
  104.                 databaseData = ReadFullTable(); 
  105.  
  106.             if (GUILayout.Button("Clear")) 
  107.  
  108.                 databaseData.Clear(); 
  109.  
  110.         GUILayout.EndHorizontal(); 
  111.  
  112.         GUILayout.Label("Database Contents"); 
  113.  
  114.         scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Height(100)); 
  115.  
  116.             for (var line : ArrayList in databaseData){ 
  117.  
  118.                 GUILayout.BeginHorizontal(); 
  119.  
  120.                 for (var s in line){ 
  121.  
  122.                     GUILayout.Label(s.ToString(), GUILayout.Width(DatabaseEntryStringWidth)); 
  123.  
  124.                 } 
  125.  
  126.                 GUILayout.EndHorizontal(); 
  127.  
  128.             } 
  129.  
  130.         GUILayout.EndScrollView(); 
  131.  
  132.         if (GUILayout.Button("Delete All Data")){ 
  133.  
  134.  DeleteTableContents(); 
  135.  
  136.             databaseData = ReadFullTable(); 
  137.  
  138.         } 
  139.  
  140.     GUILayout.EndArea(); 
  141.  
  142.  
  143. // Wrapper function for inserting our specific entries into our specific database and table for this file 
  144.  
  145. function InsertRow(firstName, lastName){ 
  146.  
  147.     var values = new Array(("'"+firstName+"'"),("'"+lastName+"'")); 
  148.  
  149.     db.InsertInto(TableName, values); 
  150.  
  151.  
  152. // Wrapper function, so we only mess with our table. 
  153.  
  154. function ReadFullTable(){ 
  155.  
  156.     return db.ReadFullTable(TableName); 
  157.  
  158.  
  159. // Another wrapper function... 
  160.  
  161. function DeleteTableContents(){ 
  162.  
  163.     db.DeleteTableContents(TableName); 
  164.  

 

  運行結果:

Unity3D教程:Unity3D與Sqlite數據庫直連

這是在Unity3D中運行的結果,數據的操作結果如下:

Unity3D教程:Unity3D與Sqlite數據庫直連

我們看見了數據的操作能夠成功,經過測試,其他的Button也都能出現相對應的效果,那我們再看看這個到底有沒有生成我們想要的數據庫文件:

Unity3D教程:Unity3D與Sqlite數據庫直連

 

Unity3D教程:Unity3D與Sqlite數據庫直連

文件當中數據:經測試,我們在對數據庫中的數據進行操作的時候,我們的Unity3D中的數據也會發生相應的改變了!

原文鏈接:http://bbs.9ria.com/forum.php?mod=viewthread&tid=168629&fromuid=308561

 

 

責任編輯:彭凡 來源: 9RIA天地會
相關推薦

2013-04-25 09:56:24

unity3D手機游戲引擎

2013-06-19 08:52:48

Unity3D

2013-04-25 10:03:07

unity3D手機游戲引擎

2013-06-17 09:12:31

Unity3D

2013-06-18 08:49:15

2012-12-24 09:14:31

ios

2013-04-25 13:27:11

unity3D手機游戲引擎

2013-04-25 09:08:39

unity3D手機游戲引擎

2013-04-09 13:42:23

Unity3D基礎知識梳理

2012-12-24 09:20:48

AndoidUnity3D

2012-12-24 09:09:27

AndoidUnity3D

2012-03-06 09:50:24

Android SQLAndroidSQLite3

2013-04-10 14:21:35

2012-12-24 09:15:57

iOSUnity3D

2012-12-24 08:52:44

iOSUnity3D

2018-07-13 09:20:30

SQLite數據庫存儲

2012-12-24 09:19:31

iOSUnity3D

2012-12-24 08:51:23

iOSUnity3D

2012-12-24 09:08:14

iOSUnity3D

2012-12-24 08:40:12

點贊
收藏

51CTO技術棧公眾號

国产亚洲欧美一区| 精品中文视频| 欧美午夜电影在线播放| 欧美精品日韩少妇| 欧美裸体网站| 亚洲欧美日韩直播| www.黄色网址.com| 午夜亚洲福利| 97超碰在线免费| 四虎在线精品| 国内外成人激情视频| 国产亚洲一区| 麻豆免费精品视频| 欧美三级一区二区| 中文字幕亚洲精品乱码| 国产午夜精品美女视频明星a级| 精品视频免费在线播放| 久久69精品久久久久久久电影好 | 97色在线播放视频| 操一操视频一区| 激情小视频在线| 国产免费观看久久| 亚洲一区二区不卡视频| 中出在线观看| 久久综合久久八八| 成人黄色91| 国产999精品久久久| 色天天久久综合婷婷女18| 国产精品中文字幕在线| 你懂的视频一区二区| 成人看片人aa| 欧美电影免费观看高清| 日本久久久久久久久久久| 另类在线视频| 成人精品在线视频| 欧美成人亚洲| 日韩一区二区三区资源| 国产精品乡下勾搭老头1| 亚洲精品第一区二区三区| 国产精品日韩久久久| 中文一区一区三区免费| 欧美超级免费视 在线| 国产无套粉嫩白浆在线2022年| 在线中文字幕-区二区三区四区| 蜜桃视频在线观看一区| 一区二区精品国产| av不卡免费在线观看| 国产字幕中文| 在线观看91精品国产麻豆| 亚洲卡一卡二| www日韩中文字幕在线看| 日韩欧美中文字幕一区二区三区| 国产经典一区二区| 成人av在线播放网址| 日本xxxxxx| 原创国产精品91| 欧美激情在线免费| 在线成人免费视频| 国产日本亚洲| 爱爱爱视频网站| 亚洲国产另类精品专区| 欧美人与禽猛交乱配| 超碰国产精品久久国产精品99| 亚洲欧洲综合另类| 日韩精品一区二区三区中文在线| 小泽玛利亚av在线| 在线色欧美三级视频| 狠狠色丁香久久婷婷综合_中| a免费在线观看| 蜜桃成人免费视频| 欧美白人最猛性xxxxx69交| 狠狠88综合久久久久综合网| 天堂av在线资源| 91成人免费视频| 欧美二区乱c少妇| 精品一区二区三区久久| jizz亚洲女人高潮大叫| 成人免费视频网站在线看| 国产精品露脸自拍| 精品久久久久久国产| 欧美精品羞羞答答| a优女a优女片| 日产精品99久久久久久| 欧美一区二区日韩| 国产成人av电影免费在线观看| 另类激情视频| 污污网站免费看| 精品国产电影| 欧美精品一区二区三区国产精品 | www 四虎| 伊人久久大香线蕉成人综合网| 国产日产久久高清欧美一区| 久久天堂电影网| 亚洲电影免费观看高清| 在线精品国精品国产尤物884a| 成人午夜伦理影院| 日本成人在线视频网站| 国产在线不卡| 亚洲视频中文| 国产专区一区| 伊人激情综合| 中文一区在线| 日韩视频二区| 99综合精品| 欧美在线综合| 日本欧美在线观看| 久久精选视频| 日韩精品一二三四| 天堂在线一区二区| 欧美极品少妇videossex| 中国 免费 av| 日本中文字幕不卡免费| 精品国产污网站| 亚洲精品免费一二三区| 日韩精品欧美成人高清一区二区| 午夜伦理福利在线| 国产一区二区三区福利| 91日韩视频在线观看| 精品免费视频123区| 日本道色综合久久影院| 色偷偷噜噜噜亚洲男人的天堂| 午夜国产不卡在线观看视频| 国产黑丝在线一区二区三区| 欧美一区影院| 日韩成人18| jizzjizz少妇亚洲水多| 天天影视久久综合| 成人福利免费网站| 可以在线看的黄色网址| 日韩av一区二区三区美女毛片| 91精品视频在线播放| 亚洲91精品在线| 久久在线精品视频| 中文字幕九色91在线| 欧美v国产在线一区二区三区| 精品视频全国免费看| 五月婷婷另类国产| 欧美国产一区二区| 不卡电影一区二区三区| 激情欧美一区二区三区在线观看| 亚洲美女毛片| 久久久久久久尹人综合网亚洲| 国产一区二区高清| 日韩电影一二三区| 国产美女在线精品| 成人aaaa免费全部观看| bt7086福利一区国产| 91网站在线观看视频| 久久精品一区二区| 亚洲色图视频网站| 亚洲午夜久久久久久久久久久| 日韩欧美在线视频观看| 黑人巨大精品欧美一区二区三区| 日韩欧美亚洲综合| 91精品国产综合久久久久久漫画| 欧美精品18+| 亚洲免费一级电影| 国产一区二区黑人欧美xxxx| 国产偷国产偷亚洲清高网站| 欧美精品一卡两卡| 欧美精品高清视频| 亚洲成a人v欧美综合天堂下载| 久久久久国产精品麻豆ai换脸| 99久久久国产精品免费蜜臀| 极品美女销魂一区二区三区| 精品一区免费av| 日本不卡在线视频| eeuss国产一区二区三区| 中文字幕一区二区三区不卡| 91免费在线播放| 亚洲线精品一区二区三区| 欧美性淫爽ww久久久久无| 日韩在线视频免费观看| 国产精品国产福利国产秒拍 | 美女的尿口免费视频| 国产免费人做人爱午夜视频| 写真福利片hd在线观看| heyzo高清在线| www.日韩系列| 2019中文字幕在线观看| 91精品国产精品| 在线亚洲男人天堂| 欧美日韩成人在线视频| 午夜精品www| 国产日产久久高清欧美一区| 久久精品国产一区二区三区不卡| 亚洲a∨日韩av高清在线观看| 日本不卡一区二区三区四区| 精品亚洲一区二区三区四区| 琪琪五月天综合婷婷| 国产原创av在线| 18加网站在线| 欧美日中文字幕| 成人永久免费视频| 欧美电影免费提供在线观看| 亚洲精品免费网站| av网站在线免费播放| 亚洲激情自拍| 欧美怡红院视频| 国产精品一区二区三区免费观看|