在Android中手动执行sql查询

时间:2016-07-28 08:26:01

标签: android sqlite

我的应用中已经有一个使用第三方library的数据库。该库似乎没有drop table功能。所以我想用 SQLiteOpenHelper API直接更改它。这可能吗?

我创建了一个扩展SQLiteOpenHelper的类,并为它提供与库中使用的相同的db名称。

public class SqliteDatabaseHelper extends SQLiteOpenHelper {

    // Database Info
    private static final String DATABASE_NAME = "myDatabase";
    private static final int DATABASE_VERSION = 1;

    private Context context;

    public SqliteDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.context = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        L.w("old: " + oldVersion + ", " + "new: " + newVersion);
        if (oldVersion != newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + "deals_latest");
            onCreate(db);
            L.w("drop it like it's hot");
        }
    }
}

我在Application类中初始化它,只是为了看它是否反映了我创建的db类。

SQLiteDatabase db = new SqliteDatabaseHelper(this).getReadableDatabase();
L.w("version: " + db.getVersion());
L.w("path: " + db.getPath());

SqliteDatabaseHelper helper = new SqliteDatabaseHelper(this);
helper.onUpgrade(db, 1, 2); // this line suppose to invoke the drop table query

运行应用时,onUpgrade()方法似乎无法调用。

请注意,我从未有过使用原生SQLite助手的经验,因此我不知道这里发生了什么。我的目标是查看是否执行onUpgrade中的查询。但该表仍存在于数据库中。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

SQLiteOpenHelper类有助于管理您自己数据库的版本。

将它用于由第三方代码管理的数据库是没有意义的。

只需使用openDatabase()直接打开数据库。