sqlite in unity indie version C#

Hey guys,

I have been trying to setup a sqlite server for my game, however I am running into problems with the Using statements (Using System.Data) in particular…Ive read around on old posts and they all say it works in JS but not C# so i was wondering if there is a way to get it to work in C#

Thanks in advanced!

Using Sqlite within Unity really isn’t that hard, while they can help, I really don’t think third-party solutions are required. I’m pretty sure that the System.Data.Sqlite library works with C#, though my own implementation use Mono.Data.Sqlite, I can’t remember if I had run into problem or if that’s just a coincidence. In any case, Mono.Data.Sqlite.dll can be found in the Unity folder: C:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0.

That’ll make a messy post and uncleaned code, but here’s an small wrapper I extracted from a project I have somewhere. Do not use it as actual implementation, its just for you to get an idea of how it works, I’ve removed all goodies and safe-checks for clarity. Finally, I did modify it a little, but I’m confident it works, I’ve used SQLite in that manner in several standalone games.

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

public class SqliteWrapper
{
    private SqliteConnection db = null;

    public void OpenDatabase(string path)
    {
        db = new SqliteConnection("URI=file:" + path);
        db.Open();
    }

    public void CloseDatabase()
    {
        db.Close();
        db = null;
    }

    //ugly get/set query method - sigh, yes I did use that...
    public object[] QueryDatabase(string query, bool isReadQuery = false)
    {
        var dbcmd = db.CreateCommand();
        dbcmd.CommandText = query;
        var reader = dbcmd.ExecuteReader();

        object[] output = null;

        if (isReadQuery)
        {
            int current = 0;
            var values = new List<object>();
            while (reader.Read())
                values.Add(reader.GetValue(current++));

            output = values.ToArray();
        }

        return output;
    }
}

By the way, SQLite doesn’t require a server of any kind, it really boils down to database file.

Do you use the official version from this page? Also you don’t need / should not use the System.data namespace. You just need System.Data.SQLite. I don’t believe that it works in JS and not in C#. Both are compiled to .Net/mono.

I haven’t used it yet, but maybe i give it a try. I only used mysql in the past. SQLite only in C++ ;). But in Unity i wasn’t in need of a database (well we have one but on the webserver…).

A really dedicated solution as local data storage for your games is Siaqodb see more info here: http://siaqodb.com/?p=482

  • easy to use, very simple API
  • works on all platforms: PC, Mac, iOS, Android
  • works for all Unity3D editions(not needed Pro edition)
  • no SQL knowledge needed
  • 100% managed code
  • small footprint

Just put a siaqodb.dll in your scripts folder and GO!, no extra configuration, no nightmares with unmanaged references

that is the best solution for you

That is 100% managed code, full SQLite3 support, all platforms.
No native dependencies.

You mention the location, Mono.Data.Sqlite.dll

On iOS you would use sqllite3.dylib or some .dylib

This is a good question not just for SQlite implementation, but on the use of Dynamic Link Libraries in general.

Does anyone have a comprehensive list for all SQlite implementations for Mono.Data.Sqlite on these Unity3D platforms?

  • Unity for Linux Stand alone
  • Unity for Android
  • Unity for iOS (what is the exact .dylib name used by Mono.Data.Sqlite ?)
  • Unity for Mac OS X stand alone
  • Unity for Windows stand alone (looks like Mono.Data.Sqlite.dll is required by any installer)
  • Unity for Flash on Linux, Mac OS X and Windows - does Mono or Unity have a plan for checking for Browser I plementations of HTML5 Web Storage System for WebKit specific or Browsws I General?