我有两个表,在打开的应用程序中要检查。
但是当我创建这两个SQLite Dao对象时,总会有一个表无法创建。
这个表是CashPayDao,即使我更改了订单的执行,修改和修改数据库版本号也不会被创建。
当我评论出WXPayDao就能成功创建CashPayDao对应表。
首先,在onCreate中创建两个SQLite Dao对象
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,数据库是一样的,现在也不明白为什么会这样。
我该怎么办?谢谢! (@•ᴗ•@)
我现在通过在Helper的onCreate和onUpgrade上运行这两个表来解决它。
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)
}
我有一个大胆的想法......
我可能知道原因,但我想我现在需要研究源代码......
SQLiteOpenHelper
管理数据库文件,而不是单个表。如果同一数据库中有多个表,请将代码放在同一个数据库帮助程序中进行管理。