0

私はまだ、Androidプログラミングで多く見られるこのコンテキスト全体を本当に理解しています。だから私はすべてのテーブルを削除する関数を作成しようとしましたが、これが私の部分的なコードです:

public class DBAdapter {
       private static class DbHelper extends SQLiteOpenHelper {
        private boolean databaseCreated = false;
        public DbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        public void deleteTables(){
        Log.d("DBAdapter","dlm drop tables pre");
        this.sqlDatabase.execSQL("DROP TABLE IF EXISTS ["+TABLE_TV+"];");
        this.sqlDatabase.execSQL("DROP TABLE IF EXISTS ["+TABLE_CAMERA+"];");
        this.sqlDatabase.execSQL("DROP TABLE IF EXISTS ["+TABLE_GPS+"];");
       }
}
}

関数deleteTablesを呼び出す部分

public class UpdateDatabase {
     public void updateTable(String table,JSONObject jsonObject){
    DBAdapter db = new DBAdapter(this);
        db.deleteTables();
    }
}

ただし、DBAdapter はコンテキストを想定しているため、もちろんエラーが返されます。パブリック クラス UpdateDatabase はアクティビティ クラスではありません。アクティビティ クラスから DbAdapter db = new DBAdapter(this) を呼び出すと、検索だけで機能します。では、この問題の修正方法を見つけるにはどうすればよいでしょうか?

ありがとう

4

2 に答える 2

2

UpdateDatabaseを受け取って格納するコンストラクタを に追加して、Contextで使用できるようにすることができますupdateTable。このようなもの:

public class UpdateDatabase {
    private final Context mContext;

    public UpdateDatabase(Context context){
        mContext = context;
    }

    public void updateTable(String table,JSONObject jsonObject){
        DBAdapter db = new DBAdapter(mContext);
        db.deleteTables();
    }
}

今、あなたがするときはいつでも、代わりnew UpdateDatabase()にあなたがする必要がありますnew UpdateDatabase(..context..). からこれを実行している場合はActivity、実行できますnew UpdateDatabase(this)

于 2012-06-11T16:31:55.053 に答える
0

こんにちは、このコードを見て..

public class DbManager
{
// the Activity or Application that is creating an object from this class.
Context context;
CustomSQLiteOpenHelper helper;
// a reference to the database used by this application/object
protected SQLiteDatabase db;
private static DbManager INSTANCE;
// These constants are specific to the database. 
protected final String DB_NAME = "yourDB";
protected final int DB_VERSION = 1;



public DbManager(Context context)
{
    this.context = context; 
    // create or open the database
    helper = new CustomSQLiteOpenHelper(context);
    this.db = helper.getWritableDatabase();
}
public static DbManager getInstance(Context context){
    if(INSTANCE == null)INSTANCE = new DbManager(context);
    return INSTANCE;
    }
public void db_Close()
{
    if(helper!=null){
        helper.close();
    }
    this.db.close();
}



private class CustomSQLiteOpenHelper extends SQLiteOpenHelper
{

    public CustomSQLiteOpenHelper(Context context)
    {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {
        // This string is used to create the database.
        // execute the query string to the database.
        //db.execSQL(newTableQueryString);
        Log.i("DataBaseManager", "Create Table");
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        // NOTHING TO DO HERE. THIS IS THE ORIGINAL DATABASE VERSION.
        // OTHERWISE, YOU WOULD SPECIFIY HOW TO UPGRADE THE DATABASE.
    }

}
}

// Inherit the DbManager Class
 public class DataCollection extends DbManager {

public DataCollection(Context context){
        super(context);
}
   public void deleteTable(String TABLE_NAME){
    try {db.execSQL("DROP TABLE "+TABLE_NAME);}//.delete(TABLE_NAME, null, null);}
    catch (Exception e){
        Log.e("DB ERROR", e.toString());
        e.printStackTrace();
    }
}
于 2012-06-11T16:27:22.020 に答える