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) { }