Я не могу получить приложение для создания базы данных sqlite - PullRequest
0 голосов
/ 04 апреля 2019

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

Я тестировал этот код на устройстве уровня API 24, но база данных не отображается в папке data / data / the_package / database /

Отредактировано для включения кода

MainActivity.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();
    }
}

CrdDBContract.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)";
    }
}

CrdDBHelper.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) {

    }
}

CrdDBDataInsertion.java

public class CrdDBDataInsertion {

    //??????????? Code not available from images
    SQLiteDatabase mDB;

    private void contentvalues(String Known, String TBF) {
        ContentValues values = new ContentValues();
        values.put(CrdDBContract.GameEntry.COLUMN_KNOWN,Known);
        values.put(CrdDBContract.GameEntry.COLUMN_TBF,TBF);
        long newid =  mDB.insert(CrdDBContract.GameEntry.TABLE_NAME,null,values);
    }
}

Основная часть деятельности 1 Основная часть деятельности 2 Основная часть деятельности 3 (окончательная)

DB Контрактный класс

DB Помощник класса

DB вставка, класс part1

DB-вставка, часть 2 (окончательная)

1 Ответ

0 голосов
/ 05 апреля 2019

Вы, согласно коду, не обращаетесь к базе данных. Вы просто создаете экземпляр DatabseHelper в MainActivity , т.е. mydb = new CrdDBHelper(this);

Только когда будет предпринята попытка открыть базу данных (которая часто является неявной), база данных фактически создается.

Простым способом было бы принудительное открытие при создании экземпляра базы данных. например вызовите метод getWritableDatabase () в конструкторе, например: -

public CrdDBHelper(@Nullable Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    getWritableDatabase();
}

Возможно, в то время установите объект SQLiteDatabase с возвращенной базой данных SQLiteDatabase, поэтому ваш Помощник по базам данных ( CrdDBHelper.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 вызывается, когда (и ТОЛЬКО когда) создается база данных, после чего будет создана таблица Game.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...