У меня странная проблема. Мое приложение, включая базу данных, работает нормально. Однако, когда я сохраняю файл базы данных и проверяю его с помощью sqlite, он пуст.
Что я делаю: я захожу в проводник файлов устройства, захожу в data-> data-> my.app.package-> database-> щелкните правой кнопкой мыши базу данных -> Сохранить как -> рабочий стол (-> перезаписать существующий файл)
Затем я использую терминал, иду на рабочий стол и набираю
sqlite3 smartfeed.db
.tables
--> таблица не найдена
select * from feedings;
-> Ошибка: нет такой таблицы: кормления, но я точно знаю, что эта таблица существует и в ней есть данные
ОБНОВЛЕНИЕ: Пакет приложения, включая базу данныхпапка выглядит следующим образом:
За несколько недель до (конечно, много изменений кода раньше), все работало нормально.
Может ли быть проблемой, что имя базы данных отличается от имени проекта и приложения?
Или я что-то упускаю?
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
}
}