1

sqlite DB のデフォルト パスをアプリケーションのアプリ キャッシュ ディレクトリに変更することは可能ですか。WebView を表示するアプリがあります。ページがキャッシュにあるかどうかわからないので、sqlite db へのページ パスを書きました。ユーザーがキャッシュ ディレクトリを削除した場合は、データベースも削除します。

これは可能ですか?

前もって感謝します

[編集]

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;

public class BmiDB {

    private static final String TAG = BmiDB.class.getSimpleName();


        //table websitecache  column names
        public static final String C_ID_WEBSITE_CACHE = BaseColumns._ID;
        public static final String C_PATH_FROM_ROOT = "pathfromroot";
        public static final String C_VERSION = "version";




    Context context;
    DBHelper dbhelper;
    ApplicationExt appObj;


    public BmiDB(Context context) {

        this.context = context;
        dbhelper = new DBHelper();
        appObj = (ApplicationExt)context.getApplicationContext();



    }



    public void deleteTableWebsiteCache() {
        // open database
        SQLiteDatabase db = dbhelper.getWritableDatabase();

        // delete contents of table
        db.delete(DBHelper.TABLEWEBSITECACHE, null, null);

        // close database
        db.close();
    }



    /**
     * inner class to create/open/upgrade database
     * 
     * @author matt
     * 
     */
    private class DBHelper extends SQLiteOpenHelper {






        // database name and version number
        public static final String DB_NAME = "bmi.db";
        public static final int DB_VERSION = 1;

        //table names

        public static final String TABLEWEBSITECACHE = "websitecache";




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

        @Override
        public void onCreate(SQLiteDatabase db) {




            String sqlToCreateWebsiteCache = String
                    .format("create table %s ( %s INTEGER primary key, %s TEXT, %s TEXT)",
                            TABLEWEBSITECACHE, C_ID_WEBSITE_CACHE, C_PATH_FROM_ROOT, C_VERSION );

            db.execSQL(sqlToCreateWebsiteCache);
            Log.e(TAG, "oncreate " + sqlToCreateWebsiteCache);


        }//end of onCreate




        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


            db.execSQL("drop table if exists " + TABLEWEBSITECACHE);
            Log.e(TAG, "onUpgrade dropped table");
            this.onCreate(db);

        }//end of onUpGrade

    }//end of DBHelper



    public void close() {

        dbhelper.close();
    }





    public void insertIntoWebsiteCache(ContentValues values) {

        SQLiteDatabase db = dbhelper.getWritableDatabase();

        db.insertWithOnConflict(DBHelper.TABLEWEBSITECACHE, null, values,
                SQLiteDatabase.CONFLICT_REPLACE);

        db.close();

    }

    public Cursor queryAllFromWebsiteCacheTable() {

        // open database
        SQLiteDatabase db = dbhelper.getReadableDatabase();

        return db.query(DBHelper.TABLEWEBSITECACHE, null, null, null, null, null,null);

    }

}//end of class

.

4

1 に答える 1

2

files/documents/users/servername/dataアプリケーションとルート ファイル システムのどちらが相対的かは不明です。

経験則: ルート ファイルシステムを指す絶対パス名を使用しないでください。これまで。物事は壊れて、ばかげたバグになってしまいます!

アプリケーションのルート ディレクトリを取得するには、次を使用します。

String ROOT_DIR = context.getFilesDir().getAbsolutePath();

そこから、データベースを任意の場所 (アプリのストレージ ツリーの下) に移動します。

于 2013-02-06T11:56:12.347 に答える