Advertisement
facebamm

SQLite Database example

Jul 5th, 2017
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.11 KB | None | 0 0
  1. namespace Database
  2. {
  3.     using System.Collections.Generic;
  4.     using System.Data.SQLite;
  5.     using System.Linq;
  6.  
  7.     public class DatabaseManager
  8.     {
  9.         public string DatabaseName { get; set; }
  10.         private SQLiteConnection Connection;
  11.         public DatabaseManager(string databasename = "base")
  12.         {
  13.             Connection = new SQLiteConnection($"Data Source={databasename}.s3db");
  14.             Connection.Open();
  15.             Connection.Close();
  16.         }
  17.  
  18.         public void CreateTable(Table table)
  19.         {
  20.             string query = $"CREATE TABLE IF NOT EXISTS {table.TableName}({string.Join(", ", table.Columns.Select(column => column.GetCreateQuery()))});";
  21.             SingleQuery(query);
  22.         }
  23.         public void CreateTable(Table table, string settings)
  24.         {
  25.             string query = $"CREATE TABLE IF NOT EXISTS {table.TableName}({string.Join(", ", table.Columns.Select(column => column.GetCreateQuery()))},{settings});";
  26.             SingleQuery(query);
  27.         }
  28.         public void CreateTables(Table[] tables)
  29.         {
  30.             foreach (Table table in tables) {
  31.                 string query = $"IF NOT EXISTS CREATE TABLE {table.TableName}({string.Join(", ", table.Columns.Select(column => column.GetCreateQuery()))});";
  32.                 SingleQuery(query);
  33.             }
  34.         }
  35.  
  36.         public void Insert(Table table, (Column column, string value)[] values)
  37.         {
  38.             string query = $"INSERT INTO {table.TableName}({string.Join(", ", values.Select(item => item.column.Name))}) VALUES ({string.Join(", ", values.Select(item => item.value))});";
  39.             SingleQuery(query);
  40.         }
  41.         public void Inserts(Table table,List<(Column column, string value)[]> values)
  42.         {
  43.             foreach (var items in values) {
  44.                 string query = $"INSERT INTO {table.TableName}({string.Join(", ", items.Select(item => item.column.Name))}) VALUES ({string.Join(", ", items.Select(item => item.value))});";
  45.                 SingleQuery(query);
  46.             }
  47.            
  48.         }
  49.         public List<(Column column, string value)[]> Select(Table table, Column[] columns)
  50.         {
  51.             string query = $"SELECT {string.Join(",", columns.Select(item => item.Name))} FROM {table.TableName};";
  52.             SQLiteDataReader reader = ReaderQuery(query);
  53.             return GetReaderReponse(columns, reader);
  54.         }
  55.         public List<(Column column, string value)[]> Select(Table table, Column[] columns, string order)
  56.         {
  57.             string query = $"SELECT {string.Join(",", columns.Select(item => item.Name))} FROM {table.TableName} {order};";
  58.             SQLiteDataReader reader = ReaderQuery(query);
  59.             return GetReaderReponse(columns, reader);
  60.         }
  61.         private void SingleQuery(string query)
  62.         {
  63.             lock (Connection) {
  64.                 Connection.Open();
  65.                 SQLiteCommand command = Connection.CreateCommand();
  66.                 command.CommandText = query;
  67.                 command.ExecuteNonQuery();
  68.                 command.Dispose();
  69.                 Connection.Close();
  70.             }
  71.         }
  72.         private SQLiteDataReader ReaderQuery(string query)
  73.         {
  74.             SQLiteDataReader reader = null;
  75.             lock (Connection) {
  76.                 Connection.Open();
  77.                 SQLiteCommand command = Connection.CreateCommand();
  78.                 command.CommandText = query;
  79.                 reader = command.ExecuteReader();
  80.                 command.Dispose();
  81.                 Connection.Close();
  82.             }
  83.             return reader;
  84.         }
  85.         private List<(Column column, string value)[]> GetReaderReponse(Column[] columns, SQLiteDataReader reader)
  86.         {
  87.             List<(Column column, string value)[]> items = new List<(Column column, string value)[]>();
  88.             while (reader.Read()) {
  89.                 (Column column, string value)[] acc = new(Column column, string value)[columns.Length];
  90.                 for (int i = 0; i < columns.Length; i += 1) {
  91.                     Column cal = columns[i];
  92.                     acc[i] = (cal, reader[cal.Name].ToString());
  93.                 }
  94.                 items.Add(acc);
  95.             }
  96.             return items;
  97.         }
  98.     }
  99.  
  100.     public class Table
  101.     {
  102.         public string TableName { get; private set; }
  103.         public List<Column> Columns { get; private set;}
  104.         public Table(string tablename,params Column[] columns)
  105.         {
  106.             TableName = tablename;
  107.             Columns = new List<Column>();
  108.             Columns.AddRange(columns);
  109.         }
  110.  
  111.         public void Addcolumn(Column column)
  112.         {
  113.             Columns.Add(column);
  114.         }
  115.         public void Addcolumns(Column[] columns)
  116.         {
  117.             Columns.AddRange(columns);
  118.         }
  119.     }
  120.  
  121.     public class Column
  122.     {
  123.         public string Name { get; private set; }
  124.         public string Typ { get; private set; }
  125.  
  126.         public Column(string name, string typ)
  127.         {
  128.             Name = name;
  129.             Typ = typ;
  130.         }
  131.  
  132.         public string GetCreateQuery() => $"{Name} {Typ}";
  133.     }
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement