不要创建第二个SQLite表

时间:2012-09-19 18:44:44

标签: android sqlite android-sqlite

我仍然是Java和Android开发的新手。但在这一部分,我找不到什么是错的。 LogCat返回“没有这样的表:翻译”。

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");
    }

    }

我认为错误是我创建表translations - 或尝试创建...

2 个答案:

答案 0 :(得分:3)

我猜你的应用程序至少只有一个只运行一个表:

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(createSpecies);
}

然后你补充道:

    db.execSQL(createTranslations);

OpenHelper不会自动检查中的任何更改。您必须强制重新创建数据库。我认为最简单的方法是增加DB_VERSION

private static final int DB_VERSION = 2;

这将运行onUpgrade(),它应删除现有架构并创建新架构。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + DB_TBL_SPECIES);
    db.execSQL("DROP TABLE IF EXISTS " + DB_TBL_TRANSLATIONS);
    onCreate(db);
}

下次更改架构时,只需更改一个数字(DB_VERSION = 3),即可构建新表格。

答案 1 :(得分:2)

从终端删除您的数据库

adb shell
cd /data/data/com.example.apploicationname/databases
rm *

我认为这也可以帮助您而不是更改DB_VERSION