Задать вопрос
@barabash2090

Как исправить ошибку при запуске базы данных Sqlite?

Добрый день! Хочу сделать свою первую простую программу с sqlite под андроид. Но при добавлении элемента возникает ошибка:
E/SQLiteLog: (1) table tbl_student has no column named id in "INSERT INTO tbl_student(id,name,email) VALUES (?,?,?)"
E/SQLiteDatabase: Error inserting id=1 name=jjj email=jjj
android.database.sqlite.SQLiteException: table tbl_student has no column named id (code 1 SQLITE_ERROR): , while compiling: INSERT INTO tbl_student(id,name,email) VALUES (?,?,?)

class MainActivity : AppCompatActivity() {
    private lateinit var edName: EditText
    private lateinit var edEmail: EditText
    private lateinit var btnAdd: Button
    private lateinit var btnView: Button

    private lateinit var sqLiteHelper: SQLiteHelper

    private lateinit var d1: SQLiteHelper


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        d1 = SQLiteHelper(this)
        d1.insertStudent(StudentModel(1,"jjj", "jjj"))

        initView()
        //sqLiteHelper = SQLiteHelper(this)
        btnAdd.setOnClickListener{ addStudent()}
        btnView.setOnClickListener{ getStudent()}
    }

    private fun getStudent() {
        val stdList = sqLiteHelper.getAllStudent()
        Log.e("pppp", "${stdList.size}")
    }

    private fun addStudent() {
        val name = edName.text.toString()
        val email = edEmail.text.toString()

        if(name.isEmpty() || email.isEmpty()){
            Toast.makeText(this, "Please enter required field ", Toast.LENGTH_SHORT).show()
        }else{
            val std = StudentModel(name = name, email = email)
            val status = sqLiteHelper.insertStudent(std)

            if(status > -1){
                Toast.makeText(this, "Student Added...", Toast.LENGTH_SHORT).show()
                clearEdiText()
            }else{
                Toast.makeText(this, "Record not saved", Toast.LENGTH_SHORT).show()
            }
        }
    }



    private fun clearEdiText() {
        edName.setText("")
        edEmail.setText("")
        edName.requestFocus()
    }


    private fun initView(){
        edName = findViewById(R.id.edName)
        edEmail = findViewById(R.id.adEmail)
        btnAdd = findViewById(R.id.bntAdd)
        btnView = findViewById(R.id.btnView)
    }
}

class SQLiteHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION){

    companion object{
        private const val DATABASE_VERSION = 1
        private const val DATABASE_NAME = "student.db"
        private const val TBL_STUDENT = "tbl_student"

        private const val ID = "id"
        private const val NAME = "name"
        private const val EMAIL = "email"
    }

    override fun onCreate(db: SQLiteDatabase?) {
        val createTblStudent = ("CREATE TABLE " + TBL_STUDENT + "(" + ID
                + " INTEGER PRIMARY KEY, " + NAME + " TEXT," + EMAIL + " TEXT" + ")")
        db?.execSQL(createTblStudent)
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        db!!.execSQL("DROP TABLE IF EXISTS $TBL_STUDENT")
        onCreate(db)
    }

    fun insertStudent(std: StudentModel): Long{
        val db = this.writableDatabase

        val contextValue = ContentValues()
        contextValue.put(ID, std.id)
        contextValue.put(NAME, std.name)
        contextValue.put(EMAIL, std.email)

        val success = db.insert(TBL_STUDENT, null, contextValue)
        db.close()
        return success
    }

    fun getAllStudent(): ArrayList<StudentModel>{
        val stdList: ArrayList<StudentModel> = ArrayList()
        val selectQuery = "SELECT * FROM $TBL_STUDENT"
        val db = this.readableDatabase

        val cursor: Cursor?

        try{
            cursor = db.rawQuery(selectQuery, null)
        }catch (e: Exception){
            e.printStackTrace()
            db.execSQL(selectQuery)
            return ArrayList()
        }

        var id: Int
        var name:String
        var email: String
        if(cursor.moveToFirst()){
            do{
                id = cursor.getInt(cursor.getColumnIndex("id"))
                name = cursor.getString(cursor.getColumnIndex("name"))
                email = cursor.getString(cursor.getColumnIndex("email"))

                val std = StudentModel(id = id, name = name, email = email)
                stdList.add(std)
            }while (cursor.moveToNext())
        }
        return  stdList
    }
}
  • Вопрос задан
  • 294 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Инженер по тестированию
    5 месяцев
    Далее
  • Яндекс Практикум
    Java-разработчик
    10 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик расширенный
    14 месяцев
    Далее
Решения вопроса 1
@rPman
ошибка английским по белому - не может найти поле id в твоей таблице

по коду, единственное место где создается таблица - это вызов метода onUpgrade, но он нигде не вызывается, может такое быть что у тебя там другая таблица, созданная вручную ранее?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽