Still I’m pretty new on the Java and Android development. But in this part, I could not find what is wrong. The LogCat return “no such table: translations”.
package se.maxallan.birdsound;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class SpeciesDbAdapter extends SQLiteOpenHelper{
public static final String DB_SPECIE_ID = "_id";
public static final String DB_SCF_NAME = "scf_name";
public static final String DB_T_LANG = "lang";
public static final String DB_T_TRANS = "translated";
private static SpeciesDbAdapter mDbHelp;
private static SQLiteDatabase mDb;
private static final String DB_NAME = "database.db";
private static final String DB_TBL_SPECIES = "species";
private static final String DB_TBL_TRANSLATIONS = "translations";
//private static final String DB_TBL_SOUNDS = "sounds";
private static final int DB_VERSION = 1;
private final Context mCtx;
static String createSpecies = "CREATE TABLE if not exists "
+ DB_TBL_SPECIES
+" ("+DB_SPECIE_ID +" INTEGER PRIMARY KEY AUTOINCREMENT,"
+DB_SCF_NAME+");";
static String createTranslations = "CREATE TABLE if not exists "
+ DB_TBL_TRANSLATIONS
+" (tid INTEGER PRIMARY KEY AUTOINCREMENT,"
+DB_SPECIE_ID+","
+DB_T_TRANS+","
+DB_T_LANG+");"; //The error is here?
public SpeciesDbAdapter(Context context) {
super(context, DB_NAME, null, DB_VERSION);
this.mCtx = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(createSpecies);
db.execSQL(createTranslations);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
//Open the database
public SpeciesDbAdapter open() throws SQLException {
mDbHelp = new SpeciesDbAdapter(mCtx);
mDb = mDbHelp.getWritableDatabase();
return this;
}
//Close the connection
public void close() {
if (mDbHelp != null) {
mDbHelp.close();
}
}
public void addSpecie(String scf, String translation, String lang){
ContentValues specieValues = new ContentValues();
ContentValues translationsValues = new ContentValues();
specieValues.put(DB_SCF_NAME, scf);
int LastInsertedId = (int) mDb.insert(DB_TBL_SPECIES, null, specieValues);
translationsValues.put(DB_T_LANG, lang);
translationsValues.put(DB_T_TRANS, translation);
translationsValues.put(DB_SPECIE_ID, LastInsertedId);
mDb.insert(DB_TBL_TRANSLATIONS, null, translationsValues);
}
public Cursor fetchAllSpecies() {
Cursor mCursor = mDb.rawQuery("select * from "+ DB_TBL_SPECIES +" s inner join "+ DB_TBL_TRANSLATIONS +" t on s._id=t._id", null);
Log.d("Database", "Result cursor size " + mCursor.getCount() );
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
public void insertSomeSpecies() {
addSpecie("Cygnus olor", "Knölsvan", "sv");
addSpecie("Cygnus cygnus", "Sångsvan", "sv");
}
}
I think that the error is were I create the table translations – or try to create…
I’m guessing that you ran your app at least one with only one table:
And then you added:
The OpenHelper will not check for any changes here automatically. You have to force the database to be recreated. I think the easiest way to do this is by increasing your
DB_VERSION.This will run
onUpgrade()which should drop the existing schema and creates your new one.The next time you change your schema simply change one number (
DB_VERSION = 3) and your new tables will be built.