mf.designing
چهارشنبه 10 مهر 1392, 11:56 صبح
سلام به دوستان عزیز
من یه پایگاه داده چند تیبلی دارای روابط رو از طریق کد زیر کپی میکنم به برنامم.
اما من نمیخوام تمام کوئری های مرتبط با select و insert و ... رو برای همه تیبل ها تو همین یه کلاس پیاده کنم ! در واقع میخوام کلاسهای جدا برای هر تیبل داشته باشم و این کلاس زیر فقط ابزار کاکنکت و شناسائی پایگاه داده باشه ! در واقع قسمتی ReadFromDB از یه کلاس دیگه بیاد !! چه کنم ؟
تشکر
اینم کد :
package com.mf.hesabras;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
public class DataBaseConnector extends SQLiteOpenHelper{
// READ the comment on orginal code
private static String DB_PATH = "/data/data/com.mf.hesabras/databases/";
private static String DB_NAME = "HesabrasDataBase";
private SQLiteDatabase myDataBase;
private final Context myContext;
public DataBaseConnector(Context context) {
super(context, DB_NAME, null, 1);
this.myContext = context;
}
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
if(dbExist)
{
}
else{
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
public String[] ReadFromDB() {
ArrayList temp_array = new ArrayList();
String[] notes_array = new String[0];
String sqlQuery = "SELECT * FROM Bank"; ;
SQLiteDatabase db = this.getWritableDatabase();
Cursor c = db.rawQuery(sqlQuery, null);
if (c.moveToFirst()){
do{
temp_array.add( c.getString(c.getColumnIndex("BankID")) +
"," + c.getString(c.getColumnIndex("BankName")) +
"," + c.getString(c.getColumnIndex("BankPic"))
);
}while(c.moveToNext());
}
c.close();
notes_array = (String[]) temp_array.toArray(notes_array);
return notes_array;
}
private boolean checkDataBase(){
SQLiteDatabase checkDB = null;
try{
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}catch(SQLiteException e){
}
if(checkDB != null){
checkDB.close();
}
return checkDB != null ? true : false;
}
private void copyDataBase() throws IOException{
InputStream myInput = myContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDataBase() throws SQLException{
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}
@Override
public synchronized void close() {
if(myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
من یه پایگاه داده چند تیبلی دارای روابط رو از طریق کد زیر کپی میکنم به برنامم.
اما من نمیخوام تمام کوئری های مرتبط با select و insert و ... رو برای همه تیبل ها تو همین یه کلاس پیاده کنم ! در واقع میخوام کلاسهای جدا برای هر تیبل داشته باشم و این کلاس زیر فقط ابزار کاکنکت و شناسائی پایگاه داده باشه ! در واقع قسمتی ReadFromDB از یه کلاس دیگه بیاد !! چه کنم ؟
تشکر
اینم کد :
package com.mf.hesabras;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
public class DataBaseConnector extends SQLiteOpenHelper{
// READ the comment on orginal code
private static String DB_PATH = "/data/data/com.mf.hesabras/databases/";
private static String DB_NAME = "HesabrasDataBase";
private SQLiteDatabase myDataBase;
private final Context myContext;
public DataBaseConnector(Context context) {
super(context, DB_NAME, null, 1);
this.myContext = context;
}
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
if(dbExist)
{
}
else{
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
public String[] ReadFromDB() {
ArrayList temp_array = new ArrayList();
String[] notes_array = new String[0];
String sqlQuery = "SELECT * FROM Bank"; ;
SQLiteDatabase db = this.getWritableDatabase();
Cursor c = db.rawQuery(sqlQuery, null);
if (c.moveToFirst()){
do{
temp_array.add( c.getString(c.getColumnIndex("BankID")) +
"," + c.getString(c.getColumnIndex("BankName")) +
"," + c.getString(c.getColumnIndex("BankPic"))
);
}while(c.moveToNext());
}
c.close();
notes_array = (String[]) temp_array.toArray(notes_array);
return notes_array;
}
private boolean checkDataBase(){
SQLiteDatabase checkDB = null;
try{
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}catch(SQLiteException e){
}
if(checkDB != null){
checkDB.close();
}
return checkDB != null ? true : false;
}
private void copyDataBase() throws IOException{
InputStream myInput = myContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDataBase() throws SQLException{
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}
@Override
public synchronized void close() {
if(myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}