为了账号安全,请及时绑定邮箱和手机立即绑定

我无法让应用程序构造 sqlite 数据库

我无法让应用程序构造 sqlite 数据库

慕斯709654 2022-09-22 15:49:04

你好,因为标题说我无法让应用程序构建一个小型的本地sqlite数据库。我很感激一些帮助,因为我是一个业余爱好者。提前致谢。下面是我的源代码的一些图片。


我在24级API设备上测试了此代码,但数据库未出现在数据/数据/the_package/数据库/文件夹中


已编辑以包含代码


主要活动.java


public class MainActivity extends AppCompatActivity {


    private CrdDBHelper mydb;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mydb = new CrdDBHelper(this);


        boolean p1 = true;

        int p11sc = 0;

        int p12sc = 0;

        Button btnMenu = (Button) findViewById(R.id.btnMenu);

        Button btntrue = (Button) findViewById(R.id.btnTrue);

        Button btnFalse = (Button) findViewById(R.id.btnFalse);


        // All other available code commented out

    }


    @Override

    protected void onDestroy() {

        mydb.close();

        super.onDestroy();

    }

}

合同.java


public final class CrdDBContract {


    private CrdDBContract(){}


    public static final class GameEntry implements BaseColumns {


        public static final String TABLE_NAME = "Game";

        public static final String COLUMN_KNOWN = "Known";

        public static final String COLUMN_TBF = "TBF";

        public static final String SQL_CREATE_TABLE =

                "CREATE TABLE " + TABLE_NAME + "("

                        + _ID + " INTEGER PRIMARY KEY, "

                        + COLUMN_KNOWN + " TEXT NOT NULL, "

                        + COLUMN_TBF + " TEXT NOT NULL)";

    }

}

克尔德贝克助手.java


public class CrdDBHelper extends SQLiteOpenHelper {


    public static final String DATABASE_NAME = "CardGame.db";

    public static final int DATABASE_VERSION = 1;


    public CrdDBHelper(@Nullable Context context) {

        super(context, DATABASE_NAME, null, DATABASE_VERSION);

    }


    @Override

    public void onCreate(SQLiteDatabase db) {

        db.execSQL(CrdDBContract.GameEntry.SQL_CREATE_TABLE);

    }


    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


    }

}



查看完整描述

1 回答

?
明月笑刀无情

TA贡献1493条经验 获得超4个赞

根据代码,您不是在访问(打开)数据库。您只是在主活动中实例化数据库帮助器,即mydb = new CrdDBHelper(this);


直到尝试打开数据库(通常是隐式的),才实际创建了数据库。


一种简单的方法是在实例化数据库时强制打开。例如,在构造函数中调用可写数据库() 方法,如 :-


public CrdDBHelper(@Nullable Context context) {

    super(context, DATABASE_NAME, null, DATABASE_VERSION);

    getWritableDatabase();

}

也许在那个时候设置一个SQLite数据库对象与返回的SQLite数据库,所以你的数据库助手(CrdDB助手.java)可以是:-


public class CrdDBHelper extends SQLiteOpenHelper {


    public static final String DATABASE_NAME = "CardGame.db";

    public static final int DATABASE_VERSION = 1;


   SQLiteDatabase mDB;


    public CrdDBHelper(@Nullable Context context) {

        super(context, DATABASE_NAME, null, DATABASE_VERSION);

        mDB = this.getWriteableDatabase();

    }


    @Override

    public void onCreate(SQLiteDatabase db) {

        db.execSQL(CrdDBContract.GameEntry.SQL_CREATE_TABLE);

    }


    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


    }

}

因为 onCreate 方法在创建数据库时(并且仅在创建数据库时)调用,因此将创建游戏表。


查看完整回答
反对 回复 6天前

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信