تبلیغات

پروژه ی معمولی رو میسازیم ، یه پکیج با نام Adapter ایجاد میکنیم و داخل اون کلاسی با نام EntryListAdaper ایجاد میکنیم . سپس دوباره پکیجی با نام Sqlite  ایجاد کرده و داخل اون پکیجی با نامClient میسازیم و توی این پکیج کلاسی با نام DbEntry ایجاد میکنیم و اون رو از چیزی extends نمیکنیم .

حال برای شناسایی cloumn های داخل دیتابیس و نام گذاری آنها در این کلاس (DbEntry) کدهایی رو مینویسیم : 

cloumn های درون دیتابیس رو با توجه با آرایه ی آنها (int ، String و ...) مینویسیم : 

;private String title , content , subject , imageAddres
;private int fav , id

سپس سه تا public در همین کلاس معرفی میکنیم : 

{}()public DbEntry
{}()public DbEntry
{}()public DbEntry

و در public DbEntry دوم مواردی رو که در بالا بصورت private معرفی کردیم رو مینویسیم : 

(public DbEntry(String title, String content, int fav, String subject, String imageAddress, int id

حال در همین public در بین {} موارد نوشته شده را به این صورت معرفی میکنیم : 

;this.title = title
;this.content = content;this.fav = fav;this.subject = subject;this.imageAddress = imageAddress;this.id = id

و همچنین در public DbEntry سوم مواردی رو که در بالا بصورت private معرفی کردیم رو مینویسیم ولی اینبار id رو نمینویسیم :

;this.title = title
;this.content = content;this.fav = fav;this.subject = subject;this.imageAddress = imageAddress

حال در زیر سه public متد های get و set رو مینوسیم : 

public String getTitle(){
return title;
}
private void setTitle(String title){
this.title = title;
}
public String getContent(){
return content;
}
public void setContent(String content){
this.content = content;
}
public int getFav(){
return fav;
}
public void setFav (int fav){
this.fav = fav;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject){
this.subject = subject;
}
public String getImageAddress(){
return imageAddress;
}
public void setImageAddress (String imageAddress) {
this.imageAddress = imageAddress;
}
public int getId (){
return id;
}
public void setId (int id){
this.id = id;
}

حال کار ما با کلاس DbEntry تموم میشه و میریم سراغ کلاس DatabaseHelper اون رو داخل پکیج Sqlite میسازیم و کدنویسی این کلاس رو شروع میکنیم.

اکتیویتی رو extends میکنیم از SQLiteOpenHelper و کدهای مورد نیاز SQLiteOpenHelper رو وارد میکنیم : 

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

حال DatabasePath و DatabaseName و version دیتابیس رو بصورت public وارد میکنیم : 

public String DatabasePath = "";
public static String DatabaseName = "db.sqlite" ;
public static final int version = 1 ;

و همچنین SQLiteDatabase و Context رو وارد میکنیم : 

private SQLiteDatabase sqLiteDatabase;
private Context context;

و سپس   وارد میکنیم و محل دیتابیس رو هم درون همین کد مینویسیم : 

public DatabaseHelper (Context context){
super(context, DatabaseName , null , version);
DatabasePath = context.getApplicationInfo().dataDir + "/databases/";
this.context = context;
}

حال کدهای مربوط به بستن دیتابیس رو مینویسیم : 

این متد رو override میکنیم چون ممکنه دیتابیس باز نشده باشه و این متد صدا زده بشه ولی با این override در صورتی که باز باشه ، بسته میشه .

@Override
public synchronized void close(){
if(sqLiteDatabase != null ){
sqLiteDatabase.close();
super.close();
}
}

حال متد برای باز کردن دیتابیس از پوشه ی دیتا یک Application رو مینویسیم : 

public void openDatabase(){
// gereftan Address va name daghighe file
String mDatabasePath = DatabasePath + DatabaseName;
// baz kardan database ba ejaze khoondan va neveshtan database
sqLiteDatabase = SQLiteDatabase.openDatabase(mDatabasePath,null, SQLiteDatabase.OPEN_READWRITE);
}

متد برای کپی کردن دیتابیس از پوشه ی assets به فولدر دیتابی برنامه رو مینویسیم : 

public void copyDatabase(){
try {
// tabdil database dakhele pooshe assets be InputStream
InputStream inputStream = context.getAssets().open(DatabaseName);
// shoroo kardane ye OutputStream baraye neveshtan database dar address data 'ye barname
OutputStream outputStream = new FileOutputStream(DatabasePath + DatabaseName);
// buffer kardan ( neveshtan ) dar ghaleb haye 1 kilo byti
byte[] buffer = new byte[1024];
int lenght;
// ta zamani ke hame inputStream tamoom nashode edame bede
while ((lenght = inputStream.read(buffer)) > 0 ){
// neveshtan OutputStream rooye hafeze ba buffer
outputStream.write(buffer, 0, lenght);
}
// code baraye motmaen shodane kare outputStrem
outputStream.flush();
// bastan inputStream va OutputStream
outputStream.close();
inputStream.close();

} catch (IOException e) {
e.printStackTrace();
}
}

متدی رو برای اینکه اگه دیتابیس نبود اون رو از پوشه ی assets کپی کنه رو مینویسیم : 

public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();

if (dbExist) {

} else {
//copy kardan database
this.getReadableDatabase();
copyDatabase();
}
}
// metod ke check mikone database rooye folder data 'e barname hast ya na
private boolean checkDataBase() {
SQLiteDatabase tempDB = null;
try {
// talash baraye baz kardan database hala ya vojood dare ya na
String myPath = DatabasePath + DatabaseName;
tempDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
} catch (SQLiteException e) {
Log.e("tle99 - check", e.getMessage());
}
// age vojood dasht database mibandatesh va true barmigardoone
if (tempDB != null)
tempDB.close();
return tempDB != null ? true : false;
}

کار با این کلاس تموم شده و حالا کلاسی با اسم DatabaseAdapter در پکیج Sqlite میسازیم و اون رو از چیزی extends نمیکنیم . حال DatabaseHelper رو در این کلاس معرفی میکنیم : 

private DatabaseHelper helper;
public DatabaseAdapter(DatabaseHelper helper){
this.helper = helper;
}

متد برای insert کردن یه entry جدید رو مینویسیم : 

// metod baraye insert kardan ye entry jadid
public void insertEntry(DbEntry entry) {
SQLiteDatabase database = helper.getWritableDatabase();
// content Value estefade mikonim ke data hamoon ro be ye soorati yekja dar biraim
ContentValues values = new ContentValues();
values.put("title", entry.getTitle());
values.put("content", entry.getContent());
values.put("fav", entry.getFav());
values.put("subject", entry.getSubject());
// code baraye insert kardan be databse
database.insert("main", null, values);
//close kardan database ke ram ezafe masraf nashe
database.close();
}

و این کدها رو وارد میکنیم :