Есть ли способ получить внутреннюю хранимую базу данных SQLite с помощью моего кода? - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь получить доступ к моему ранее сохраненному .db файлу с помощью моего Java кода:

    String path = "/data/data/" + this.getPackageName() + "/databases/" + DBHelper.DATABASE_NAME;
    SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(path, null);

И здесь хранится файл .db: введите описание изображения здесь

Необработанный путь: /data/data/com.xxx.xxx/databases/database.db

Но при компиляции Android Studio продолжает предупреждать меня об этом: (DATABASE_NAME ссылается на database.db)

E/SQLiteLog: (1) no such table: database.db

MainActivity. java

private void startMatching() {
    DBHelper helper = new DBHelper(this);
    SQLiteDatabase write = helper.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(DBHelper.COLUMN_NAME_ORIGINAL, original);
    
    write.insert(DBHelper.TABLE_NAME, null, values);
}

DBHelper. java

public static final String DATABASE_NAME = "database.db";
public static final Integer DATABASE_VERSION = 1;
public static final String TABLE_NAME = "mTable";

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

Я понятия не имею, почему возникает эта ошибка. Кто-нибудь может помочь? : (

1 Ответ

0 голосов
/ 07 августа 2020

В android, когда вы используете SqlLiteDatabase, вы на самом деле не указываете путь. Обо всем этом позаботятся вы. Вот хорошая документация, которой нужно следовать, чтобы начать работу с вашей базой данных: https://developer.android.com/training/data-storage/sqlite

Короче говоря, ваш базовый c класс базы данных будет выглядеть так:

public class FeedReaderDbHelper extends SQLiteOpenHelper {
    // If you change the database schema, you must increment the database version.
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "FeedReader.db";

    public FeedReaderDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_ENTRIES);
    }
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // This database is only a cache for online data, so its upgrade policy is
        // to simply to discard the data and start over
        db.execSQL(SQL_DELETE_ENTRIES);
        onCreate(db);
    }
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        onUpgrade(db, oldVersion, newVersion);
    }
}

Обратите внимание на то, что имя БД - это ТОЛЬКО имя, а НЕ путь. у вас также будет класс «контракт» для определения констант таблиц, которые затем можно будет использовать при создании этих таблиц, а также для чтения / записи в эти таблицы и из них. Внимательно прочтите связанное руководство, и вы должны научиться go!

Однако, если вы хотите использовать предварительно заполненную базу данных, я предлагаю вам вместо этого изучить SQLiteOpenHelper.

...