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

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

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

慕斯709654 2022-09-22 15:49:04
你好,因为标题说我无法让应用程序构建一个小型的本地sqlite数据库。我很感激一些帮助,因为我是一个业余爱好者。提前致谢。下面是我的源代码的一些图片。我在24级API设备上测试了此代码,但数据库未出现在数据/数据/the_package/数据库/文件夹中已编辑以包含代码主要活动.javapublic 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();    }}合同.javapublic 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)";    }}克尔德贝克助手.javapublic 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贡献1828条经验 获得超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 方法在创建数据库时(并且仅在创建数据库时)调用,因此将创建游戏表。


查看完整回答
反对 回复 2022-09-22
  • 1 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号