Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use(create db, create table, query, etc) praeclarum sqlite-net?

I want to use sqlite-net available from this link https://github.com/praeclarum/sqlite-net.

Unfortunately, the getting started documentation are not enough. It doesnt even mention how to create a database. I tried looking at the examples, unfortunately, the examples are broken(unable to compile, run time error etc).

The most practical tutorial i can find on the net is http://blog.tigrangasparian.com/2012/02/09/getting-started-with-sqlite-in-c-part-one/

Unfortunately, sqlite-net doesnt fully support sqlite.org sqlite implementation, thus making the tutorial useless for praeclarum sqlite-net.

What is the equivalent method to do the same thing from the tutorial but in praeclarum sqlite-net?

From the tutorial

Create database(Here is where i stuck)

SQLiteConnection.CreateFile("MyDatabase.sqlite");

Connect to database

SQLiteConnection m_dbConnection;
m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
m_dbConnection.Open();

Create table

string sql = "create table highscores (name varchar(20), score int)";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();

Fill table

string sql = "insert into highscores (name, score) values ('Me', 3000)";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
sql = "insert into highscores (name, score) values ('Myself', 6000)";
command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
sql = "insert into highscores (name, score) values ('And I', 9001)";
command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();

Query database

string sql = "select * from highscores order by score desc";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
    Console.WriteLine("Name: " + reader["name"] + "\tScore: " + reader["score"]);
like image 535
Syaiful Nizam Yahya Avatar asked Dec 19 '22 21:12

Syaiful Nizam Yahya


2 Answers

In your Where you can use lambdas. The classes are strongly typed.

Makes things a lot cleaner.

If you get into any amount of data caching, you'll end up wishing you had something like Microsoft's sync framework to use in Mono. I'm really guessing by your post, that you are looking at using Xamarin. Take a look at their SQLCipher component, if you are going to be caching data locally.

Also, if you do use SQLCipher via the component store.. it works in Android 2.3 on up. So don't expect a fully backward compatible system even with the Support Library added to your project.

var db = new SQLiteConnection("sqllite.db")

db.CreateTable<SyncRecord> ();

db.Insert (new SyncRecord () { SyncDate = DateTime.UtcNow });

var query = db.Table<SyncRecord> ().Where( /* your lambda to filter*/);

like image 95
Slack Shot Avatar answered Dec 22 '22 10:12

Slack Shot


My suggested answer is based on @Slack-Shot response.

I try to convert the tutorial to be praeclarum sqlite syntax compatible for reference to other super noobs like me.

Create and/or connect to database

private string dbPath = System.IO.Path.Combine
    (System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location),
     "MyDatabase.sqlite");

using (var m_dbConnection = new SQLite.SQLiteConnection(dbPath)) {}

Create table

public class highscore
{
    [MaxLength(20)]
    public string name { get; set; }
    public int score { get; set; }
}

using (var m_dbConnection = new SQLite.SQLiteConnection(dbPath))
{
    m_dbConnection.CreateTable<highscore>();
}

Fill table

using (var m_dbConnection = new SQLite.SQLiteConnection(dbPath))
{
    m_dbConnection.Insert(new highscore()
    {
        name = "Me",
        score = 9001
    });
    m_dbConnection.Insert(new highscore()
    {
        name = "Me",
        score = 3000
    });
    m_dbConnection.Insert(new highscore()
    {
        name = "Myself",
        score = 6000
    });
    m_dbConnection.Insert(new highscore()
    {
        name = "And I",
        score = 9001
    });
}

Query database

Assuming I have a simple SQL string like so: "select * from highscores order by score desc"

How do I display it in this form:

for(int i = 0; i < totalDataQueried; i++)
    Console.WriteLine("Name: " + name[i] + "\tScore: " + score[i]);
like image 41
Syaiful Nizam Yahya Avatar answered Dec 22 '22 10:12

Syaiful Nizam Yahya