【问题标题】:Android SQLite Database Helper InstanceAndroid SQLite 数据库助手实例
【发布时间】:2014-07-08 10:17:00
【问题描述】:

在上一篇文章中,有一种方法可以创建我的 SQLiteDatabse 的单个实例,然后在整个应用程序中简单地引用它。我不知道如何告诉它我的数据库在哪里。由于我的数据库是写入 SDCard 的,所以必须有一种方法来告诉它应该使用哪个数据库,对吗?下面是代码:

    public class DatabaseManager {

    private int mOpenCounter;

    private static DatabaseManager instance;
    private static SQLiteOpenHelper mDatabaseHelper;
    private SQLiteDatabase mDatabase;

    public static synchronized void initializeInstance(SQLiteOpenHelper helper) {
        if (instance == null) {
            instance = new DatabaseManager();
            mDatabaseHelper = helper;
        }
    }

    public static synchronized DatabaseManager getInstance() {
        if (instance == null) {
            throw new IllegalStateException(DatabaseManager.class.getSimpleName() +
                    " is not initialized, call initializeInstance(..) method first.");
        }

        return instance;
    }

    public synchronized SQLiteDatabase openDatabase() {
        mOpenCounter++;
        if(mOpenCounter == 1) {
            // Opening new database
            mDatabase = mDatabaseHelper.getWritableDatabase();
        }
        return mDatabase;
    }

    public synchronized void closeDatabase() {
        mOpenCounter--;
        if(mOpenCounter == 0) {
            // Closing database
            mDatabase.close();

        }
    }

}

我的实际数据库名为 FooBase.db

static File directoryPath = new File(Environment.getExternalStorageDirectory().toString() + "/MyApp/database");

【问题讨论】:

    标签: android android-sqlite instance


    【解决方案1】:

    您不需要明确提及数据库的路径。

    默认情况下,所有 android 应用程序都将其数据库存储在该位置 /data/data/packageName/

    SQLiteOpenHelper - creating database on SD card

    How to store sqlite database directly on sdcard

    Docs

    【讨论】:

    • 谢谢,但在这种情况下,数据库至少会变成 13mb 或更多,所以我想通过将其与其他文件一起写入 SDCard 来确保有足够的空间作为应用程序。因此,我仍然必须指定上述内容
    • 此外,还必须有一种方法来告诉它要打开哪个数据库。如果你有很多呢?
    • 好的...现在情况不同了,我会尽快更新我的答案。
    • 感谢您的宝贵时间,但这与我的问题无关。我已经有一个工作数据库并且已经创建了它。我遇到了 Asynctask 问题,在尝试读取数据库时会关闭数据库。所以我添加了上面的代码,以便我可以正确引用一个实例。上面的代码缺少的是数据库名称和位置。否则,引用的实例是什么。
    • 解决方案在我提供的链接的答案中。您只需在SQLiteOpenHelper 类的onCreate() 方法中添加路径,并在SD 卡中创建一个目录并使用它。此外,您还需要 SD 卡的读/写权限。
    猜你喜欢
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2018-11-19
    • 1970-01-01
    • 2018-07-25
    相关资源
    最近更新 更多