Файл базы данных пуст, но база данных работает - PullRequest
1 голос
/ 02 октября 2019

У меня странная проблема. Мое приложение, включая базу данных, работает нормально. Однако, когда я сохраняю файл базы данных и проверяю его с помощью sqlite, он пуст.

Что я делаю: я захожу в проводник файлов устройства, захожу в data-> data-> my.app.package-> database-> щелкните правой кнопкой мыши базу данных -> Сохранить как -> рабочий стол (-> перезаписать существующий файл)

Затем я использую терминал, иду на рабочий стол и набираю
sqlite3 smartfeed.db
.tables --> таблица не найдена
select * from feedings; -> Ошибка: нет такой таблицы: кормления, но я точно знаю, что эта таблица существует и в ней есть данные

ОБНОВЛЕНИЕ: Пакет приложения, включая базу данныхпапка выглядит следующим образом:
Picture of database folder

За несколько недель до (конечно, много изменений кода раньше), все работало нормально.
Может ли быть проблемой, что имя базы данных отличается от имени проекта и приложения?
Или я что-то упускаю?

dbHelper, создающий db:

public class FeedingDbHelper extends SQLiteOpenHelper {

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

    // TODO Delete
    private static final String TAG = "Gerke";

    // SQL creation statement for feeding table
    private static final String DATABASE_FEEDINGS_CREATE = "CREATE TABLE " + FeedingEntry.TABLE_NAME + "(" +
            FeedingEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            FeedingEntry.COLUMN_FEEDING_NAME + " String NOT NULL, " +
            FeedingEntry.COLUMN_COW_NUMBER + " INTEGER NOT NULL, " +
            FeedingEntry.COLUMN_KG_PER_COW + " REAL NOT NULL);";

    // SQL creation statement for components table
    private static final String DATABASE_COMPONENTS_CREATE = "CREATE TABLE " +
            ComponentEntry.TABLE_NAME + "(" +
            ComponentEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            ComponentEntry.COLUMN_FEEDING_ID + " INTEGER NOT NULL, " +
            ComponentEntry.COLUMN_PREMIX_ID + " INTEGER," +
            ComponentEntry.COLUMN_MANUAL_COMPONENT_ID + " INTEGER," +
            "FOREIGN KEY(" + ComponentEntry.COLUMN_FEEDING_ID + ") REFERENCES " +
            FeedingEntry.TABLE_NAME + "(" + FeedingEntry._ID + ")," +
            "FOREIGN KEY(" + ComponentEntry.COLUMN_PREMIX_ID + ") REFERENCES " +
            PremixEntry.TABLE_NAME + "(" + PremixEntry._ID + ")," +
            "FOREIGN KEY(" + ComponentEntry.COLUMN_MANUAL_COMPONENT_ID + ") REFERENCES " +
            ManualComponentEntry.TABLE_NAME + "(" + ManualComponentEntry._ID + "))";

    // SQL creation statement for manual components table
    private static final String DATABASE_MANUAL_COMPONENT_CREATE =
            "CREATE TABLE " + ManualComponentEntry.TABLE_NAME + "(" +
                    ManualComponentEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    ManualComponentEntry.COLUMN_NAME + " TEXT NOT NULL, " +
                    ManualComponentEntry.COLUMN_KG_PER_COW + " INTEGER NOT NULL);";

    // SQL creation statement for premixable components table
    private static final String DATABASE_PREMIXABLE_CREATE =
            "CREATE TABLE " + PremixableEntry.TABLE_NAME + "(" +
                    PremixableEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    PremixableEntry.COLUMN_NAME + " TEXT NOT NULL UNIQUE, " +
                    PremixableEntry.COLUMN_SILO + " INTEGER NOT NULL UNIQUE);";

    // SQL creation statement for Premix
    private static final String DATABASE_PREMIX_CREATE =
            "CREATE TABLE " + PremixEntry.TABLE_NAME + "("
                    + PremixEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + PremixEntry.COLUMN_NAME + " TEXT NOT NULL UNIQUE);";

    // SQL creation statement for m:n premix --> premixable components
    private static final String DATABASE_PREMIX_PREMIXABLE_COMPONENT_CREATE =
            "CREATE TABLE " + Premix_Premixable_Entry.TABLE_NAME + "("
                    + Premix_Premixable_Entry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + Premix_Premixable_Entry.COLUMN_PREMIX_ID + " INTEGER NOT NULL, "
                    + Premix_Premixable_Entry.COLUMN_PREMIXABLE_COMPONENT_ID + " INTEGER NOT NULL, "
                    + Premix_Premixable_Entry.COLUMN_KG_PER_COW + " REAL NOT NULL, "
                    + "FOREIGN KEY(" + Premix_Premixable_Entry.COLUMN_PREMIX_ID + ") REFERENCES "
                    + PremixEntry.TABLE_NAME + "(" + PremixEntry._ID + "), "
                    + "FOREIGN KEY(" + Premix_Premixable_Entry.COLUMN_PREMIXABLE_COMPONENT_ID + ") REFERENCES "
                    + PremixableEntry.TABLE_NAME + "(" + PremixableEntry._ID + "));";


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

    @Override
    public void onCreate(SQLiteDatabase db) {
        // Logging the creation statements TODO: DELETE or change to other log type
        Log.d(TAG, "SQL Creation Statements:");
        Log.d(TAG, "DATABASE_FEEDINGS_CREATE: " + DATABASE_FEEDINGS_CREATE);
        Log.d(TAG, "DATABASE_COMPONENTS_CREATE: " + DATABASE_COMPONENTS_CREATE);
        Log.d(TAG, "DATABASE_MANUAL_COMPONENT_CREATE: " + DATABASE_MANUAL_COMPONENT_CREATE);
        Log.d(TAG, "DATABASE_PREMIXABLECOMPONENTS_CREATE: " + DATABASE_COMPONENTS_CREATE);
        Log.d(TAG, "DATABASE_PREMIX_CREATE: " + DATABASE_PREMIX_CREATE);
        Log.d(TAG, "DATABASE_PREMIX_PREMIXABLE_COMPONENT_CREATE: " + DATABASE_PREMIX_PREMIXABLE_COMPONENT_CREATE);

        // Creating the database
        db.execSQL(DATABASE_FEEDINGS_CREATE);
        db.execSQL(DATABASE_COMPONENTS_CREATE);
        db.execSQL(DATABASE_MANUAL_COMPONENT_CREATE);
        db.execSQL(DATABASE_PREMIXABLE_CREATE);
        db.execSQL(DATABASE_PREMIX_CREATE);
        db.execSQL(DATABASE_PREMIX_PREMIXABLE_COMPONENT_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        // Nothing to do as this is version 1
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...