samedi 11 avril 2015

Copying sqlite database to android creates empty database

I'm trying to copy existing sqlite database to my android app and then use it from android databases folder. but after copying database it creates empty database in android data/data//databases folder(not the one with existing data) here is my databasehelper class. Can anyone help me?



public class DatabaseHelper extends SQLiteOpenHelper{


private Context mycontext;
private String DB_PATH = "data/data/com.channa.saralawadana/databases/";
private static String DB_NAME = "english_sinhala.sqlite";
public SQLiteDatabase myDataBase;

public DatabaseHelper(Context context) {
super(context, DB_NAME, null, 1);
this.mycontext = context;
boolean dbexist = checkdatabase();
if (dbexist) {
} else {
System.out.println("Database doesn't exist");
try {
createDataBase();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

public void createDataBase() throws IOException {
boolean dbexist = checkdatabase();
if (dbexist) {
} else {
this.getReadableDatabase();
try {
copydatabase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}

private boolean checkdatabase() {
boolean checkdb = false;
try {
String myPath = DB_PATH + DB_NAME;
File dbfile = new File(myPath);
checkdb = dbfile.exists();
} catch (SQLiteException e) {
System.out.println("Database doesn't exist");
}

return checkdb;
}

private void copydatabase() throws IOException {

// Open your local db as the input stream
InputStream myinput = mycontext.getAssets().open(DB_NAME);
// Path to the just created empty db
@SuppressWarnings("unused")
String outfilename = DB_PATH + DB_NAME;

// Open the empty db as the output stream
OutputStream myoutput = new FileOutputStream(
"data/data/com.channa.saralawadana/databases/english_sinhala");

// transfer byte to inputfile to outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myinput.read(buffer)) > 0) {
myoutput.write(buffer, 0, length);
}

// Close the streams
myoutput.flush();
myoutput.close();
myinput.close();

}

public void openDataBase() {
// Open the database
String mypath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(mypath, null,
SQLiteDatabase.OPEN_READWRITE);

}

public synchronized void close() {
myDataBase.close();
super.close();
}

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub

}



}

Aucun commentaire:

Enregistrer un commentaire