Intereting Posts
Ошибка при попытке ввести ViewModelProvider в действие с помощью Dagger2 и Kotlin Сделать элемент RecyclerView для полноэкранного просмотра с помощью перехода / анимации Почему я получаю сообщение об ошибке «Смарт-бросок в« Лонг »невозможно» в Котлине? Но это нормально в java? Видимость конструктора ограничена файлом Kotlin flatMap – карта Swift – выход из внешней функции из закрытия Скользящий ответ после успеха в Котлине Проверьте, является ли класс допустимым значением для KParameter Несоответствие типа Котлина при прохождении в параметре Клавиатура скрывает BottomSheetDialogFragment Наблюдает личную окончательную ошибку Inject Ошибка при использовании callBy для функции с параметрами по умолчанию в Котлине Как компилировать Kotlin для включения jar Java с командной строкой? Как использовать инъекцию зависимостей в тестах Spek Ожидаемое значение типа Boolean: всплывающее меню

Одновременно создаются два объекта SQLiteDao, один из которых не создает таблицу при выполнении Helper

У меня две таблицы, в открытом приложении будет проверяться.

Но когда я создаю эти два объекта SQLite Dao, всегда невозможно создать таблицу.

Эта таблица – CashPayDao, даже если я изменил реализацию заказа на изменение и изменение номера версии базы данных, не будет создан.

Когда я прокомментировал, WXPayDao сможет успешно создать соответствующую таблицу CashPayDao.

Во-первых, создайте два объекта SQLite Dao в onCreate

cashDao = CashPayDao(this) wxDao = WXPayDao(this) 

Содержание CashPayDao:

 class CashPayDao(context: Context) { private val payHelper = CashPayDBHelper(context) 

Содержимое CashPayDBHelper:

 class CashPayDBHelper(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) { override fun onCreate(db: SQLiteDatabase) { db.execSQL(SQLITE_CREATE) } override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { db.execSQL(SQLITE_DELETE_ENTRIES) onCreate(db) } override fun onDowngrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { onUpgrade(db, oldVersion, newVersion) } companion object { private val SQLITE_CREATE = "create table if not exists " + CASHPAY_TABLE_NAME + " (" + OUT_TRADE_NO + TEXT_TYPE + " PRIMARY KEY, " + TEL_SEQ + TEXT_TYPE + COMMA_SEP + TOTAL_FEE + DOUBLE_TYPE + COMMA_SEP + STORE_ID + TEXT_TYPE + COMMA_SEP + ASS_POS + INT_TYPE + COMMA_SEP + NEXT_TRANNO + INT_TYPE + COMMA_SEP + SEQ + TEXT_TYPE + COMMA_SEP + THE_STEP + INT_TYPE + COMMA_SEP + ERROR_MESSAGE + TEXT_TYPE + COMMA_SEP + IS_DONE + INT_TYPE + DEFAULT + COMMA_SEP + IS_UPLOAD + INT_TYPE + DEFAULT + COMMA_SEP + UPLOAD_COUNT + INT_TYPE + DEFAULT + COMMA_SEP + CREATE_TIME + " DATETIME DEFAULT (datetime(CURRENT_TIMESTAMP,'localtime')))" private val SQLITE_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + CASHPAY_TABLE_NAME } } 

Содержание WXPayDao:

 class WXPayDao(context: Context) { private val payHelper = WXPayDBHelper(context) 

Содержимое WXPayDBHelper:

 class WXPayDBHelper(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) { override fun onCreate(db: SQLiteDatabase) { db.execSQL(SQLITE_CREATE) } override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { db.execSQL(SQLITE_DELETE_ENTRIES) onCreate(db) } override fun onDowngrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { onUpgrade(db, oldVersion, newVersion) } companion object { private val SQLITE_CREATE = "create table if not exists " + WXPAY_TABLE_NAME + " (" + OUT_TRADE_NO + TEXT_TYPE + " PRIMARY KEY, " + TRANSACTION_ID + TEXT_TYPE + COMMA_SEP + TEL_SEQ + TEXT_TYPE + COMMA_SEP + TOTAL_FEE + DOUBLE_TYPE + COMMA_SEP + STORE_ID + TEXT_TYPE + COMMA_SEP + ASS_POS + INT_TYPE + COMMA_SEP + NEXT_TRANNO + INT_TYPE + COMMA_SEP + SEQ + TEXT_TYPE + COMMA_SEP + OPENID + TEXT_TYPE + COMMA_SEP + COUPON_FEE + DOUBLE_TYPE + COMMA_SEP + THE_STEP + INT_TYPE + COMMA_SEP + ERROR_MESSAGE + TEXT_TYPE + COMMA_SEP + IS_DONE + INT_TYPE + DEFAULT + COMMA_SEP + IS_UPLOAD + INT_TYPE + DEFAULT + COMMA_SEP + UPLOAD_COUNT + INT_TYPE + DEFAULT + COMMA_SEP + CREATE_TIME + " DATETIME DEFAULT (datetime(CURRENT_TIMESTAMP,'localtime')))" private val SQLITE_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + WXPAY_TABLE_NAME } } 

Я тщательно определил, что имя таблицы отличается, одно – cash_pay, одно – wx_pay, база данных такая же, и теперь она не понимает, почему это так.

Что мне делать? Спасибо! (@ • ᴗ • @)


Теперь я решил это, запустив обе таблицы в onCreate и onUpgrade для Helper.

Содержимое CashPayDBHelper:

 override fun onCreate(db: SQLiteDatabase) { db.execSQL(SQLITE_CREATE) db.execSQL(WXPayDBHelper.SQLITE_CREATE) } override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { db.execSQL(SQLITE_DELETE_ENTRIES) db.execSQL(WXPayDBHelper.SQLITE_DELETE_ENTRIES) onCreate(db) } 

Содержимое WXPayDBHelper:

 override fun onCreate(db: SQLiteDatabase) { db.execSQL(SQLITE_CREATE) db.execSQL(CashPayDBHelper.SQLITE_CREATE) } override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { db.execSQL(SQLITE_DELETE_ENTRIES) db.execSQL(CashPayDBHelper.SQLITE_DELETE_ENTRIES) onCreate(db) } 

У меня смелая идея ……

Я, вероятно, знаю причину, но я думаю, что мне сейчас нужно изучить исходный код …

Solutions Collecting From Web of "Одновременно создаются два объекта SQLiteDao, один из которых не создает таблицу при выполнении Helper"