4

SQLiteDataBaseクラスを拡張して、クエリの実行時間に関する統計を行う目的で、いくつかのメソッド(rawQuery、execSQLなど)をオーバーライドできるようにしたいと思います。

私がそれらの関数を呼び出す場所は何百もあります。したがって、基本クラスSQLiteDatabaseから派生クラスを作成すると、非常に役立ちます。

問題は、SQLiteDataBaseを拡張するときに、スーパークラスからコンストラクターが見つからないことです。

import android.database.sqlite.SQLiteDatabase;

public class MySQLiteDatabase extends SQLiteDatabase
{

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

}
4

2 に答える 2

10

私がそれらの関数を呼び出す場所は何百もあります。したがって、基本クラスSQLiteDatabaseから派生クラスを作成すると、非常に役立ちます。

SQLiteDatabase宣言されているとおりにを拡張することはできません。また、Javaでクラスをfinal拡張することもできません。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 
}
于 2013-03-22T18:35:07.453 に答える
0

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);
  }
} 
于 2013-03-22T18:28:25.537 に答える