I’m developing a small app with a database of 100 elements. I import the database but only in one emulator (of 3 witch I have) runs correctly. I found that it runs without problems because the “Songs.db” database exists in data/data/myapppackage/databases/ folder witch I can’t have access without rooting the device.
I search through internet for different approaches and solutions to this problem but nothing is working. I am new to android programming and for this kind of problem there isn’t any tutorial.
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Songs.db";
public static final String TABLE_NAME = "songs_table";
public static final String COL_1 = "ID";
public static final String COL_2 = "TITLE";
public DatabaseHelper (Context context) {
super( context, DATABASE_NAME, null, 1 );
SQLiteDatabase db = this.getWritableDatabase();
}
public Cursor getData(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery( "select TITLE from songs_table where ID="+id+"", null );
return res;
}
}
and on PlayerTurn class
myDb = new DatabaseHelper( this );
Cursor rs = db.getData( b );
rs.moveToFirst();
tit = rs.getString( rs.getColumnIndex( db.COL_2 ) );
The error message I get most of the times is android.database.sqlite.SQLiteException: no such table: songs_table (code 1):
Can anyone help me? I spend almost 15 hours about that…
Advertisement
Answer
You can copy the DB into SD card, From SD card you can always access the DB
Try this code:
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (sd.canWrite()) {
String currentDBPath = "data/"+sPackageName+"/databases/"+sDBName;
String backupDBPath = "/.appname-external-data-cache/"+sDBName; //"{database name}";
File dir = new File(sd,backupDBPath.replace(sDBName,""));
if(dir.mkdir()) {
}
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
}
} catch (Exception e) {
}