无法检索从Android的SQLite的保存数据

问题描述 投票:0回答:1

我是新来编程,并开始约一个月。我创建了一个数据库来存储ATM卡的详细信息,我试图找回它。然而,情况并非如此。

我可以看到,同时节省存储卡的详情正在执行的吐司消息 - “(卡添加)”。但是,当连我打开应用程序应该从数据库中获取的数据。现在,它是给0作为计数。

我打电话从主活动的数据。

我试图通过清除应用数据删除数据库了。

这是我的MainActivity

class MainActivity : AppCompatActivity() {

    companion object {
        lateinit var dbHander:DBHandler
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        dbHander=DBHandler(this, null, null, 1)
        viewCards()
        floatingActionButton.setOnClickListener {
        val intent= Intent(this, NewCardRegistration::class.java)
            startActivity(intent)
        }
    }

    fun viewCards() {
        val cardList= dbHander.getCards(this)
        val adapter=Adapters(this, cardList)
        val rv: RecyclerView= rv as RecyclerView
        rv.layoutManager=LinearLayoutManager(this, LinearLayout.VERTICAL, false)
        rv.adapter=adapter
    }

    override fun onResume() {
        viewCards()
        super.onResume()
    }
}

DBHandler

class DBHandler(context: Context, name:String?, factory: SQLiteDatabase.CursorFactory?, version:Int):
        SQLiteOpenHelper(context, DATABASE_NAME, factory, DATABASE_Version) {


    companion object {

        val DATABASE_NAME = "MyCards.db"
        val DATABASE_Version = 1
        val CARDS_TABLE_NAME = "CARDS"
        val COLUMN_CARD_ID = "CARD_ID"
        val COLUMN_BANK_NAME = "BANK_NAME"
        val COLUMN_CARD_HOLDER_NAME = "NAME"
        val COLUMN_CARD_VALIDITY = "CARD_VALIDITY"

    val COLUMN_CARD_CVV = "CARD_CVV"
        val COLUMN_CARD_NUMBER = "CARD_NUMBER"
        val COLUMN_CUSTOMER_CARE_NUMBER = "CUSTOMER_CARE_NUMBER"

    }

    override fun onCreate(db: SQLiteDatabase?) {
        val CREATE_CARD_TABLE: String = ("CREATE TABLE $CARDS_TABLE_NAME(" +
                "$COLUMN_CARD_ID INTEGER PRIMARY KEY AUTOINCREMENT," +
                "$COLUMN_BANK_NAME," +
                "$COLUMN_CARD_CVV," +
                "$COLUMN_CARD_VALIDITY," +
                "$COLUMN_CARD_NUMBER" +
                "$COLUMN_CUSTOMER_CARE_NUMBER" +
                "$COLUMN_CARD_HOLDER_NAME)")

        db?.execSQL(CREATE_CARD_TABLE)
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
    }

    fun getCards(mCtx: Context): ArrayList<Cards> {
        val query = "Select * from $CARDS_TABLE_NAME"
        val db = this.readableDatabase
        val cursor = db.rawQuery(query, null)
        val cardsArray = ArrayList<Cards>()

        if (cursor.count == 0)
            Toast.makeText(mCtx, "No records Found", Toast.LENGTH_LONG).show()
        else {
            while (cursor.moveToNext()) {
                val cards   = Cards()
                cards.cardID = cursor.getInt(cursor.getColumnIndex(COLUMN_CARD_ID))
                cards.bankName = cursor.getString(cursor.getColumnIndex(COLUMN_BANK_NAME))
                cards.cardCVV = cursor.getInt(cursor.getColumnIndex(COLUMN_CARD_CVV))
                cards.cardHolderName = cursor.getString(cursor.getColumnIndex(COLUMN_CARD_HOLDER_NAME))
                cards.validity = cursor.getString(cursor.getColumnIndex(COLUMN_CARD_VALIDITY))
                cards.ccNumber=cursor.getDouble(cursor.getColumnIndex(COLUMN_CUSTOMER_CARE_NUMBER))
                cardsArray.add(cards)
            }
            Toast.makeText(mCtx, "${cursor.count} Records Found", Toast.LENGTH_LONG).show()
        }

        cursor.close()
        db.close()
        return cardsArray
    }

    fun addCard(context: Context, cards: Cards) {
        val values = ContentValues()
        values.put(COLUMN_CARD_VALIDITY, cards.validity)
        values.put(COLUMN_CARD_HOLDER_NAME, cards.cardHolderName)
        values.put(COLUMN_CARD_CVV, cards.cardCVV)
        values.put(COLUMN_BANK_NAME, cards.bankName)
        values.put(COLUMN_CARD_NUMBER, cards.cardNumber)
        values.put(COLUMN_CUSTOMER_CARE_NUMBER, cards.ccNumber)

        val db = this.writableDatabase

        try {
            db.insert(CARDS_TABLE_NAME,null,values)
            Toast.makeText(context, "Card Added", Toast.LENGTH_SHORT).show()
        } catch (e: Exception) {

            Toast.makeText(context, e.message, Toast.LENGTH_SHORT).show()
        }

        db.close()
    }
}

和模型类来保存数据。

class Cards {
    var cardID: Int=0
    var bankName: String=""
    var cardHolderName:String=""
    var cardCVV:Int=0
    var validity:String=""
    var cardNumber: Double = 0.0
    var ccNumber:Double=0.0
}
android database sqlite kotlin database-connection
1个回答
2
投票
val CREATE_CARD_TABLE: String = ("CREATE TABLE $CARDS_TABLE_NAME(" +
            "$COLUMN_CARD_ID INTEGER PRIMARY KEY AUTOINCREMENT," +
            "$COLUMN_BANK_NAME," +
            "$COLUMN_CARD_CVV," +
            "$COLUMN_CARD_VALIDITY," +
            "$COLUMN_CARD_NUMBER" +
            "$COLUMN_CUSTOMER_CARE_NUMBER" +
            "$COLUMN_CARD_HOLDER_NAME)")

你在这里失踪列之间的一些,逗号。其结果是,该表没有,你认为它的列。

try {
    db.insert(CARDS_TABLE_NAME,null,values)
    Toast.makeText(context, "Card Added", Toast.LENGTH_SHORT).show()
} catch (e: Exception) {

    Toast.makeText(context, e.message, Toast.LENGTH_SHORT).show()
}

insert()不扔错误。它返回-1指示错误,如果你要改用insertOrThrow(),你会得到,说:“未知列”异常。

怎么修:

  • 修复onCreate() SQL和添加缺少的逗号
  • 更改insert()insertOrThrow()让你敬酒按预期工作有
  • 卸载你的应用程序或清除应用程序的数据删除旧的数据库和已onCreate()再次运行。
© www.soinside.com 2019 - 2024. All rights reserved.