繁体   English   中英

如何使用 SQliteOpenhelper :android 项目将 SQLite 数据库路径更改为不同的文件夹(在应用程序目录中)

[英]How to change SQLite database path to different folder (in application directory) using SQliteOpenhelper :android project

我目前正在研究 Android 项目,它有一个 SQLite 数据库。 我之前使用 flutter 创建了数据库,并使用下面的代码来获取创建数据库的路径。

// Get the directory path for both Android and iOS to store database.
    Directory directory = await getApplicationDocumentsDirectory();
    String path = directory.path + '/ideaDatabase.db';

它指向路径

/data/data/com.example.myprojet01/app_flutter/ideaDatabase.db

根据我的要求,我必须为项目添加 android 特定代码(Java)。 我不得不从 java 和 dart 部分在数据库上方添加数据/访问。 任何人都可以帮助我如何从 Java 访问数据库。 我正在使用 SQliteOpenhelper 类来访问数据库。

SQLiteopenhelper 默认在创建数据库

/data/data/com.example.myprojet01/databases/ideaDatabase.db

是否可以指定 SQliteopenhelper 从 /app_flutter/ 目录而不是 /databases/. 打开数据库?

代码 java 数据库助手

public class Database_Helper_widget extends SQLiteOpenHelper {

    public static final String TAG="Database_Helper_widget";

    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "ideaDatabase.db";

    public Database_Helper_widget(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String CreateTable=MycreateString;
        db.execSQL(CreateTable);
    }

代码颤振:

 Future<Database> initializeDatabase() async {
    // Get the directory path for both Android and iOS to store database.
    Directory directory = await getApplicationDocumentsDirectory();
    String path = directory.path + '/ideaDatabase.db';
    debugPrint('path to database $path');
    // Open/create the database at a given path
    var ideaDatabase =
        await openDatabase(path, version: 1, onCreate: _createDb);
    return ideaDatabase;
  }

注意:回答我自己的问题,不是完美的解决方案,而是我暂时使用的解决方法。 如果您有更好的解决方案,请改进此答案或添加新答案。

而不是使用应用程序目录文件夹(Flutter)来存储数据库。 我正在使用 "getDatabasesPath()" 。 这样Android特定代码和Flutter代码都指向Android中的同一个数据库文件夹(不确定IOS)

这指向您的数据库位置:

/data/data/com.example.myprojet01/databases/ideaDatabase.db

这与 java 中由 SQliteOpenHelper 类创建的默认数据库位置相同。

  Future<Database> initializeDatabase() async {
    // Get the directory path for both Android and iOS to store database.
    // Directory directory = await getApplicationDocumentsDirectory();
    String databasePath = await getDatabasesPath();
    String path = databasePath + '/ideaDatabase.db';
    // Open/create the database at a given path
    var ideaDatabase =
        await openDatabase(path, version: 1, onCreate: _createDb);
    return ideaDatabase;
  }

如果您想从 Android 特定代码和 Flutter 代码访问公共数据库,则此方法有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM