【问题标题】:How to extend SQLiteDatabase class?如何扩展 SQLiteDatabase 类?
【发布时间】:2013-03-22 18:21:01
【问题描述】:

我想扩展 SQLiteDataBase 类,以便能够覆盖一些方法(如 rawQuery、execSQL 等),目的是对查询执行时间进行一些统计。

我在数百个地方调用这些函数。所以,从基类 SQLiteDatabase 创建一个派生类对我有很大帮助!

问题是:扩展SQLiteDataBase时,找不到父类的构造函数。

import android.database.sqlite.SQLiteDatabase;

public class MySQLiteDatabase extends SQLiteDatabase
{

    MySQLiteDatabase()
    {
        super(); // <<<--- can't find any visible constructor
    }

}

【问题讨论】:

  • SQLiteDatabase这样的final不能扩展。另外,请不要在您的问题标题前加上Android,底部的标签就足够了。

标签: java android sqlite


【解决方案1】:

有数百个地方我称之为这些函数。所以, 从基类 SQLiteDatabase 创建派生类将有所帮助 我很多!。

你不能扩展SQLiteDatabase,因为它被声明为final,你不能在java中扩展final类。

另一种方法是制作一个“包装器”SQLiteDatabase,它将复制 SQLiteDatabase 类及其方法,并将测量逻辑插入包装器方法中:

public class SQLiteDatabaseWrapper {

    private SQLiteDatabase mDatabase;

    public void initDatabase() {
      //obtain the database here and assign it to mDatabase 
    }

    // replicate the SQLiteDatabase methods 
    public void execSQL(String sql) {
       //insert whatever logic you have for measurement
       // do the measurement
       mDatabase.execSQL(sql); 
    }
    // other methods from SQLiteDatabase 
}

【讨论】:

    【解决方案2】:

    由于您导入 sqliteDatabase 类,您实际上不需要扩展它已经可供您使用。
    简单定义:

    Sqlitedatabase dbname;
    dbname.execSQL(Query);
    

    或者:

    public class MySQLiteHelper extends SQLiteOpenHelper {
    
      public static final String TABLE_COMMENTS = "comments";
      public static final String COLUMN_ID = "_id";
      public static final String COLUMN_COMMENT = "comment";
    
      private static final String DATABASE_NAME = "commments.db";
      private static final int DATABASE_VERSION = 1;
    
      // Database creation sql statement
      private static final String DATABASE_CREATE = "create table "
          + TABLE_COMMENTS + "(" + COLUMN_ID
          + " integer primary key autoincrement, " + COLUMN_COMMENT
          + " text not null);";
    
      public MySQLiteHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
      }
    
      @Override
      public void onCreate(SQLiteDatabase database) {
        database.execSQL(DATABASE_CREATE);
      }
    
      @Override
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(MySQLiteHelper.class.getName(),
            "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_COMMENTS);
        onCreate(db);
      }
    } 
    

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 2013-03-30
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多