Flutter sqflite Paket Kullanımı

Flutter sqflite Paket Kullanımı

-Paket adresi : https://pub.dev/packages/sqflite
-Uygulama için veritabanı oluşturur.
-Çok büyük olmayan veriler uygulamanın yüklü olduğu cihazın belleğinde veritabanı dosyası şeklinde saklanır.
-Bir veritabanında olan veri ekleme, silme, güncellene gibi işlemler yapılabilir.
 
Paket Kullanımı
 
1. pubspec.yaml dosyasında dependencies: altına shared_preferences: any ekle ve dosyayı kaydet. Otomatik olarak flutter paketi indirip ekleyecek.
 
dependencies:
sqflite: ^1.1.0
 
2. yaml dosyasını kaydettikten sonra eğer dosya indirilmesi başlamaz ise  konsoldan “flutter pub get” yazıp entera basarak indirme işlemini başlatabilirsiniz.
 
3. Kullanılmak istenen dosyaya import etmek
import ‘package:sqflite/sqflite.dart’;
 
4. Veritabanı işlemleri için sunulan fonksiyon listesi:
 
 
PATH(DİZİN) OLUŞTUR
//PATH: android ve ios için veri tabanı dizinini oluşturur yada getirir daha sonra veritabanı adını söz konusu dizinle birleştirir
var databasesPath = await getDatabasesPath();
String path = join(databasesPath, ‘demo.db’);
 
CREATE DATABASE
//CREATE DATABASE: Veritabanını oluştururken aynı zamanda tablo oluşturma gibi(create, update, insert gibi ) işlemleri yapılabilir.
Database database = await openDatabase(path, version: 1, onCreate);
 
TABLO OLUŞTUR
_onCreate(Database database, int version) async { await database.execute( ‘CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)’ ); }
 
//Kullanım
Future<Database> hpCreateDatabase() async {
 String databasesPath = await getDatabasesPath();
 String dbPath = join(databasesPath, ‘my.db’);
 
 var database = await openDatabase(dbPath, version: 1, onCreate: _onCreate);
 return database;
}
 
void _onCreate(Database database, int version) async {
await db.execute( ‘CREATE TABLE tableName ( tColonName_id INTEGER PRIMARY KEY, tColonName_name TEXT, tColonName_value INTEGER, tColonName_num REAL )’ );
}
 
DELETE DATABASE
Future<void> deleteDatabase(String path);
 
//Kullanım
await deleteDatabase(path);
 
DATABASE VAR MI?
  Future<bool> databaseExists(String path);
    
INSERT
// Son girilen kaydın id sini döndürür
// HAM
Future<int> rawInsert(String sql, [List<dynamic> arguments]);
 
//Kullanım1
Future<Modal> hpInsert(Modal modal) async { modal.colon_id = await database.rawInsert( ‘INSERT INTO Test(name, value, num) VALUES(?, ?, ?)’, [‘another name’, 12345678, 3.1416]); return modal;  } 
 
//Kullanım2
Future<Modal> hpInsert(Modal modal) async { modal.id = await database.rawInsert(
      “INSERT INTO ${modal.tableName} (${modal.tColonName_name}, ${modal.tColonName_value}, ${modal.tColonName_num})”
      ” VALUES (${modal.name},${modal.value},${modal.num})”); return modal;  }
 
//HELPER
Future<int> insert(String table, Map<String, dynamic> values);
 
//Kullanım
Future<Modal> hpInsert(Modal modal) async { modal.id = await database.insert(modal.tableName, modal.toMap()); return modal;  } 
 
READ – QUERY(SORGU)-KAYIT OKUMA
// Sorgu sonucunda bulunan sonuçların satırlarını  map listesi olarak döndürür.
 
// HAM
  Future<List<Map<String, dynamic>>> rawQuery(String sql, [List<dynamic> arguments]);
 
//Kullanım  1 – ALL
Future<List<Map<String, dynamic>>> hpReadAll(String tableName) async {
var result = await database.rawQuery(‘SELECT * FROM $tableName’);
return result;
}
 
//Kullanım  2 – İd ile
Future<Modal> hpReadwithId(String tableName, int id) async {
var result = await database.rawQuery(‘SELECT * FROM  $tableName WHERE tColonName_id = $id’ );
 
if (results.length > 0) {
return new Modal.fromMap(results.first);
 }
 
 return null;
}
 
//HELPER
  Future<List<Map<String, dynamic>>> query(String table, {bool distinct, List<String> columns, String where,
List<dynamic> whereArgs, String groupBy,String having,String orderBy, int limit, int offset});
  
//Kullanım  1 – ALL
Future<List<Map<String, dynamic>>> hpReadAll(String tableName) async {
var result = await database.query(‘$tableName’);
return result;
}
 
//Kullanım 2 – İd ile
Future<Modal> hpReadwithId(String tableName, int id) async {
List<Map> maps = await database.query( tableName,
columns: [tColonName_id, tColonName_name, tColonName_value],
where: ‘tColonName_id = ?’,
whereArgs: [id]
  );
 
if (maps.length > 0) {
 return Modal.fromMap(maps.first);
}
return null;
 
}
 
UPDATE -GÜNCELLEME
//Yapılan değişiklik sayısını döndürür. ? olan yerlere  [whereArgs] içindeki değerler sırasıyla atanır.
 
// HAM
Future<int> rawUpdate(String sql, [List<dynamic> arguments]);
 
//Kullanım 
Future<int> updateCustomer(Modal modal) async {
 return await database.rawUpdate( ‘UPDATE ${modal.tableName} SET tColonName_name = ${modal.name} WHERE tColonName_id = ${modal.id}’ );
}
 
//HELPER
 Future<int> update(String table, Map<String, dynamic> values,{String where,List<dynamic> whereArgs, ConflictAlgorithm conflictAlgorithm } );
 
//Kullanım 
Future<int> hpUpdate(Modal modal) async {
return await database.update(modal.tableName, modal.toMap(), where: ‘tColonName_id = ?’, whereArgs: [modal.id]);
}
 
DELETE  -KAYIT SİLME
//Yapılan değişiklik sayısını döndürür. ? olan yerler  [whereArgs] içindeki değerler e sırasıyla karşılık gelir.
 
// HAM
Future<int> rawDelete(String sql, [List<dynamic> arguments]);
 
//Kullanım 
Future<int>  hpDeletewithId(String tableName, int id)  async {
 return await database.rawDelete(‘DELETE FROM $tableName WHERE tColonName_id = $id’);
}
 
//HELPER
Future<int> delete(String table, {String where, List<dynamic> whereArgs});
 
//Kullanım 
Future<int> hpDeletewithId(String tableName, int id) async {
 return await database.delete(tableName, where: ‘tColonName_id = ?’, whereArgs: [id]);
}
 
TOPLU İŞLEMLER
//Bir den fazla ve sıralı veritabanı işlemleri transaction fonksiyon içinde yapılır.
await database.transaction((txn) async {
 
//insert 1. yol direk değerler verilerek yapılır. 
 int id1 = await txn.rawInsert(‘INSERT INTO Test(name, value, num) VALUES(“some name”, 1234, 456.789)’);
 
// insert 2. yolda ise liste verilerek yapılır
 int id2 = await txn.rawInsert( ‘INSERT INTO Test(name, value, num) VALUES(?, ?, ?)’, [‘another name’, 12345678, 3.1416]);
 print(‘inserted2: $id2’);
});
 
 
RECORD COUNT-KAYIT SAYISI
//RECORD COUNT: tablodaki kayıt sayısını döndürür.
count = Sqflite.firstIntValue(await database.rawQuery(‘SELECT COUNT(*) FROM $tableName’));
 
//Kullanım 
Future<int> hpGetCount(String tableName) async {
int count = Sqflite.firstIntValue(await database.rawQuery(‘SELECT COUNT(*) FROM $tableName’));
return count;
}
 
DATABASE İÇ VERSIYONU
 Future<int> getVersion();
 
//Kullanım 
Future<int> hpGetVersion() async => database.getVersion();
 
DATABASE AÇIK MI?
 bool get isOpen;
 
CLOSE
//veritabanı bağlantısını kapat
await database.close();
//Kullanım 
Future hpClose() async => database.close();
 
EK NOTLAR
//my_table tablosundan kayıtların tümünü records nesnesine çekelim
List<Map<String, dynamic>> records = await database.query(‘my_table’);
 
// ilk kaydı alalım
Map<String, dynamic> mapRead = records.first;
 
//HATA döndürür. mapRead sadece okunabilir  yazılamaz.
mapRead[‘my_column’] = 1;
 
//Doğru kullanımı:
// mapRead ‘den ilk kaydı map nesnesine al
Map<String, dynamic> map = Map<String, dynamic>.from(mapRead);
// artık bellekteki map nesnesi güncellenebilir.
map[‘my_column’] = 1;

Bir cevap yazın

KAPAT
%d blogcu bunu beğendi: