SQLite

Kiegészítő: sqlite-net-pcl

Négy fontos fájl mellékelve
- ISQLite.cs a közös gyökerébe, a többi pedig a nevében lévő OS gyökerébe kell felmásolni.
- Namespace-t pedig természetesen át kell nevezni.
 
Data.cs
using SQLite;
namespace Projekt
{
    public class Users
    {
        [PrimaryKey, AutoIncrement]
        public int id { get; set; }
        [NotNull, MaxLength(40)]
        public string login { get; set; }
        [NotNull]
        public string pswd { get; set; }
        public int active { get; set; } = 1;
        public int home_id { get; set; }
        public Users() { }
    }
 
    public class Homes
    {
        [PrimaryKey, AutoIncrement]
        public int id { get; set; }
        public string address { get; set; }
        public Homes() { }
    }
 
    public class UsersHomes
    {
        public int user_id { get; set; }
        public string user_login { get; set; }
        public string home_address { get; set; }
        public UsersHomes() { }
    }
}
- Az Autoincrement értékét a rendszer határozza meg, befolyásolni nem lehet. Vagyis ha az id mezőnek 4-es értéket kéne kapnia, de 16-ost adunk meg, akkor 4-es értéket fog kapni!
- Ha módosul az osztály, akkor a háttérben módosult a hozzája tartozó táblázat is.
- Ha a lekérdezés kettő vagy több táblát is érint, akkor külön osztály létrehozása, lásd: UsersHomes tábla is egy olyan lekérdezéshez tartozik, amely érinti a Users és a Homes táblákat is. 
- Nincs külső kulcs.
 
Database.cs
using System.Linq;
using SQLite;
using Xamarin.Forms;
 
namespace Projekt
{
    public class UsersDatabase
    {
        private SQLiteConnection conn;
 
        // Csatlakozás az adatbázishoz
        public UsersDatabase()
        {
            conn = DependencyService.Get().GetConnection();
            conn.CreateTable<Users>();
        }
 
        // Felhasználó felvitele
        public void AddUser(Users user)
        {
            conn.Insert(user);
        }
 
        // Felhasználó módosítása
        public void UpdateUser(Users user)
        {
            string pswd = user.pswd;
            int active = user.active;
            int id = user.id;
            conn.Execute("UPDATE Users SET pswd=?, active=? WHERE id=?", pswd, active, id);
 
            // conn.Update(user); parancsot csak akkor lehet használni, ha minden egyes mezőnek van értéke. Ha valamelyiknek nem adunk értéket és lehet üres, akkor üres lesz! Ha nem lehet üres, akkor hibára fut!
            // conn.InsertOrReplace(user); esetén szintén minden mezőnek kötelező értéket adni - ha létezik az adott elsődleges kulcs, akkor UPDATE, különben INSERT.
 
        }
 
        // Felhasználó törlése ID-je alapján
        public void DeleteUser(int id)
        {
            conn.Delete<Users>(id);
        }
 
        // Felhasználó lekérdezése ID-je és aktív állapota alapján
        public Users[] GetUser(int id, int active)
        {
            var users = (from u in conn.Table<Users>() where u.id == id && u.active == active select u);
            return users.ToArray();
        }
 
        // Összes felhasználó lekérdezése id szerint fordított sorrendben, akinek a login-ja tartalmazza a mi-t
        public Users[] GetUsersFiltered()
        {
            var users = (from u in conn.Table<Users>() where u.login.Contains("mi") orderby u.id descending select u);
            return users.ToArray();
        }
    }
 
    public class HomesDatabase
    {
        private SQLiteConnection conn;
 
        // Csatlakozás az adatbázishoz
        public HomesDatabase()
        {
            conn = DependencyService.Get<ISQLite>().GetConnection();
            conn.CreateTable<Homes>();
        }
 
        // Otthon felvitele
        public void AddHome(Homes home)
        {
            conn.Insert(home);
        }
 
        // Felhasználók és otthonaik lekérdezése
        public UsersHomes[] GetUsersHomes()
        {
            var usershomes = (from u in conn.Table<Users>() from h in conn.Table<Homes>() where u.home_id == h.id select new UsersHomes{ user_id = u.id, user_login = u.login, home_address = h.address });
            return usershomes.ToArray();
        }
    }
}
Lekérdezések
// Csatlakozás az adatbázisokhoz
UsersDatabase usersDatabase = new UsersDatabase();
HomesDatabase homesDatabase = new HomesDatabase();
 
// Egy otthon létrehozása
Homes homes = new Homes();
homes.address = "3530 Miskolc, Petőfi Sándor utca 1-3.";
homesDatabase.AddHome(homes);
 
// Két felhasználó létrehozása
Users users = new Users();
users.login = "Valaki";
users.pswd = "adfdef+R3f";
users.home_id = 1;
usersDatabase.AddUser(users);
 
users = new Users();
users.login = "Valami";
users.pswd = "adfdfdfdf++3f";
users.home_id = 1;
usersDatabase.AddUser(users);
 
// Második felhasználó módosítása
users = new Users();
users.id = 2;
users.pswd = "DFgfgfg4gfr+++";
users.active = 1;
usersDatabase.UpdateUser(users);
 
// Összes felhasználó és cím lekérdezése
var szurt = usersDatabase.GetUsersFiltered();
 
// Ezek adatainak kiíratása
int lenght = szurt.Length;
for (int i = 0; i < lenght; i++)
{
    int id = szurt[i].id;
    string login = szurt[i].login;
    Label label = new Label();
    label.Text = id + "/" + login;
    Output.Children.Add(label);
}
 
// Összes felhasználó és cím lekérdezése
var osszes = homesDatabase.GetUsersHomes();
 
// Ezek adatainak kiíratása
lenght = osszes.Length;
for (int i = 0; i < lenght; i++)
{
    int user_id = osszes[i].user_id;
    string user_login = osszes[i].user_login;
    string home_address = osszes[i].home_address;
    Label label = new Label();
    label.Text = user_id + "/" + user_login + "/" + home_address;
    Output.Children.Add(label);
}
 
// Első felhasználó lekérdezése
var elso = usersDatabase.GetUser(1,1);
string elso_login = elso[0].login;
string elso_pswd = elso[0].pswd;
DisplayAlert("Felhasználó adatai", elso_login + "/" + elso_pswd, "OK");
 
// Egy felhasználó törlése
usersDatabase.DeleteUser(1);
 
Alternatív megvalósítások SELECT esetén I.
var users = (from u in conn.Table<Users>() where u.login.Contains("mi") orderby u.id descending select u);
var users = conn.Table<Users>().Where(u => u.login.Contains("mi")).OrderByDescending(u => u.id).Select(u => u);
var users = conn.Query<Users>("SELECT * FROM Users WHERE login LIKE '%mi%' ORDER BY id DESC");
 
Alternatív megvalósítások SELECT esetén II.
var users = (from u in conn.Table<Users>() where u.id == id && u.active == active select u);
var users = conn.Table<Users>().Where(u => u.id == id && u.active == active).Select(u => u);
var users = conn.Query<Users>("SELECT * FROM Users WHERE id=? AND active=?", id, active);
var users = conn.Query<Users>("SELECT * FROM Users WHERE id="+id+" AND active="+active);
 

 

Mobilos kategóriák: