数据库文件为空,但数据库正在运行

时间:2019-10-02 10:36:59

标签: android android-sqlite android-database

我面临一个奇怪的问题。我的应用程序(包括数据库)运行正常。但是,当我保存数据库文件并用sqlite检查它为空时。

我的工作: 我转到设备文件浏览器,转到数据->数据-> my.app.package->数据库->右键单击数据库->另存为->桌面(->覆盖现有文件)

然后我使用终端,进入桌面并输入
sqlite3 smartfeed.db
.tables->找不到表
select * from feedings;->错误:没有这样的表格:供稿,但我绝对知道该表格存在并且里面有数据

更新: 该应用程序包(包括数据库文件夹)如下所示:
Picture of database folder

几周前(当然,之前需要更改很多代码),一切正常。
数据库名称与项目和应用程序名称不同可能是一个问题吗?
还是我想念其他东西?

dbHelper,创建数据库:

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
    }
}

0 个答案:

没有答案