SQLite-net for Unity, supports Windows, Linux, macOS, iOS, tvOS, visionOS, Android and WebGL
MIT License
This package provides the excelent SQLite-net library for accessing SQLite databases in Unity.
SQLiteConnection.Serialize
extension method for serializing a database to byte[]
(reference: SQLite Serialization).SQLiteConnection.Deserialize
extension method for deserializing memory (byte[]
, NativeArray<byte>
or ReadOnlySpan<byte>
) into an open database (reference: SQLite Deserialization).Either:
openupm add com.gilzoide.sqlite-net
https://github.com/gilzoide/unity-sqlite-net.git#1.0.1
Assets
or Packages
folder.The following code demonstrates some of SQLite-net's core functionality. Check out SQLite-net's Wiki for more complete documentation on how to use the library.
using SQLite;
using UnityEngine;
// The library contains simple attributes that you can use
// to control the construction of tables, ORM style
public class Player
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
}
public class TestSQLite : MonoBehaviour
{
void Start()
{
// 1. Create a connection to the database.
// The special ":memory:" in-memory database and
// URIs like "file:///somefile" are also supported
var db = new SQLiteConnection($"{Application.persistentDataPath}/MyDb.db");
// 2. Once you have defined your entity, you can automatically
// generate tables in your database by calling CreateTable
db.CreateTable<Player>();
// 3. You can insert rows in the database using Insert
// The Insert call fills Id, which is marked with [AutoIncremented]
var newPlayer = new Player
{
Name = "gilzoide",
};
db.Insert(newPlayer);
Debug.Log($"Player new ID: {newPlayer.Id}");
// Similar methods exist for Update and Delete.
// 4.a The most straightforward way to query for data
// is using the Table method. This can take predicates
// for constraining via WHERE clauses and/or adding ORDER BY clauses
var query = db.Table<Player>().Where(p => p.Name.StartsWith("g"));
foreach (Player player in query)
{
Debug.Log($"Found player named {player.Name} with ID {player.Id}");
}
// 4.b You can also make queries at a low-level using the Query method
var players = db.Query<Player>("SELECT * FROM Player WHERE Id = ?", 1);
foreach (Player player in players)
{
Debug.Log($"Player with ID 1 is called {player.Name}");
}
// 5. You can perform low-level updates to the database using the Execute
// method, for example for running PRAGMAs or VACUUM
db.Execute("VACUUM");
}
}
SQLite-net for Unity first-party code is licensed under the MIT license.
Third-party code:
LibraryPath
was changed from sqlite3
to __Internal
in WebGL/iOS/tvOS/visionOS builds and gilzoide-sqlite-net
for other platforms.LibraryPath
is made public.SQLiteConnection.Quote
is made public.SQLite3.SetDirectory
is only defined in Windows platforms.