SQLite - столбцы Datebase - PullRequest
       3

SQLite - столбцы Datebase

0 голосов
/ 12 января 2020

Можете ли вы помочь решить проблему с отсутствующим столбцом? Мне кажется, что я все сделал правильно, но я получаю ошибку, что что-то не так с одним столбцом.

ОШИБКА

E / SQLiteLog: (1) нет такой столбец: Stezen ie D / AndroidRuntime: завершение работы VM E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.apkadlapacjenta, PID: 11261 java .lang.RuntimeException: Невозможно запустить активность ComponentInfo {com.example.apkadlapacjenta / com.example.apkadlapacjenta.HistoriaPomiarow}: android .database.sqlite.SQLiteException: нет такого столбца: Stezenie (код 1 SQLITE_ERROR):, при компиляции: SELECT Id, Stezen * 1028 , Zegar, Data, Posilek, Stres, Samopoczu cie, Гипергликемия ОТ Pomiary в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 3270) в android .app.ActivityThread .handleLaunchActivity (ActivityThread. java: 3409) в android .app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem. java: 83) в android .app.servertransaction.TransactionExecutor.executeCall обратно (TransactionExecutor. java: 135) на android .app.servertransaction.TransactionExecutor.execute (TransactionExecutor. java: 95) на android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 2016) в android .os.Handler.dispatchMessage (Обработчик. java: 107) в android .os.Looper.l oop (Looper. java: 214) в android .app. ActivityThread.main (ActivityThread. java: 7356) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java : 492) at com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 930) Причина: android .database.sqlite.SQLiteException: нет такого столбца: Stezen ie (код 1 SQLITE_ERROR): при компиляции: SELECT Id, Stezen ie, Zegar, Data, Posilek, Stres, Samopoczu cie, Hiperglikemia FROM Pomiary в android .database.sqlite.SQLiteConnection.nativePrepareStatement (собственный метод) в android .database.sqlite.SQLiteConnection.acquirePreparedStatement (SQLiteConnection. java: 986) в android .database.sqlite .SQLiteConnection.prepare (SQLiteConnection. java: 593) в android .database.sqlite.SQLiteSession.prepare (SQLiteSession. java: 590) в android .database.sqlite.SQLiteProgram. (SQLiteProgram. java: 61) в android .database.sqlite.SQLiteQuery. (SQLiteQuery. java: 37) в android .database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver. java: 46) в android. database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase. java: 1443) в android .database.sqlite.SQLiteQueryBuilder.query (SQLiteQueryBuilder. java: 515) в android .database.sqlite.SQLilquBery SQLiteQueryBuilder. java: 392) на com.example.apkadlapacjenta.DbMenager.Query (DbMenager.kt: 65) на com.example.apkadlapacjenta.HistoriaPomiarow.LoadQuery (HistoriaPample. At. apkadlapacjenta.HistoriaPomiarow.onCreate (HistoriaPomiarow.kt: 33) в android .app.Activity.performCreate (Activity. java: 7802) в android .app.Activity.performCreate (Activity. java : 7791) в android .app.Instrumentation.callActivi tyOnCreate (Instrumentation. java: 1299) в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 3245) в android .app.ActivityThread.handleLaunchActivity (ActivityThread. java: 3409) в android .app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem. java: 83) в android .app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor. java: 135) в android .app.servertransaction.TransactionExecutor .execute (TransactionExecutor. java: 95) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 2016) в android .os.Handler.dispatchMessage (Обработчик. java: 107) в android .os.Looper.l oop (Looper. java: 214) в android .app.ActivityThread.main (ActivityThread. java: 7356) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit . java: 492) at com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 930) I / Процесс: отправка сигнала. PID: 11261 SIG: 9 Отключен от целевой виртуальной машины, адрес: «localhost: 8630», транспорт: «сокет»

ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ

package com.example.apkadlapacjenta

import android.annotation.SuppressLint
import android.app.AlertDialog
import android.app.SearchManager
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.SearchView
import androidx.appcompat.app.AppCompatActivity

import kotlinx.android.synthetic.main.activity_historia_pomiarow.*
import kotlinx.android.synthetic.main.content_historia_pomiarow.*
import kotlinx.android.synthetic.main.row.view.deleteBtn
import kotlinx.android.synthetic.main.row1.view.*

@Suppress("DEPRECATION")
class HistoriaPomiarow : AppCompatActivity() {

    var listaWynikow = ArrayList<FIrebaseVal>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_historia_pomiarow)
        setSupportActionBar(toolbar)

        //Wczytujemy baze danych
        LoadQuery("%")
    }

    override fun onResume() {
        super.onResume()
        LoadQuery("%")
    }

    private fun LoadQuery(pomiary: String) {
        val dbManager = DbMenager(this)
        val projections = arrayOf(
            "Id",
            "Stezenie",
            "Zegar",
            "Data",
            "Posilek",
            "Stres",
            "Samopoczucie",
            "Hiperglikemia"
        )
        val selectionArgs = arrayOf(pomiary)
        val cursor =
            dbManager.Query(projections,null,null,null)
        listaWynikow.clear()
        if (cursor.moveToFirst()) {
            do {
                val ID = cursor.getInt(cursor.getColumnIndex("Id"))
                val Stezenie = cursor.getString(cursor.getColumnIndex("Stezenie"))
                val Zegar = cursor.getString(cursor.getColumnIndex("Zegar"))
                val Data = cursor.getString(cursor.getColumnIndex("Data"))
                val Posilek = cursor.getString(cursor.getColumnIndex("Posilek"))
                val Stres = cursor.getString(cursor.getColumnIndex("Stres"))
                val Samopoczucie = cursor.getString(cursor.getColumnIndex("Samopoczucie"))
                val Hiperglikemia = cursor.getString(cursor.getColumnIndex("Hiperglikemia"))
                listaWynikow.add(
                    FIrebaseVal(
                        ID,
                        Stezenie,
                        Zegar,
                        Data,
                        Posilek,
                        Stres,
                        Samopoczucie,
                        Hiperglikemia ))

            } while (cursor.moveToNext())
        }

        //Adapter
        val ListaWynikowAdapter = MylistApdater(this, listaWynikow)
        //ustawienia adaptera
        listapomiarow.adapter = ListaWynikowAdapter

        // Wszystkie zadania
        val total = listapomiarow.count
        //actionbar
        val mActionBar = supportActionBar
        if(mActionBar !=null){
            //ustawienia Action Bara
            mActionBar.subtitle = "Masz $total wyników"
        }
    }
    override fun onCreateOptionsMenu(menu: Menu?):Boolean {
        menuInflater.inflate(R.menu.notemenu, menu)

        //searchView
        val sv: SearchView = menu!!.findItem(R.id.app_bar_search).actionView as SearchView
        val sm = getSystemService(Context.SEARCH_SERVICE) as SearchManager
        sv.setSearchableInfo(sm.getSearchableInfo(componentName))
        sv.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
            //implementujemy dwie metody
            override fun onQueryTextSubmit(query: String?): Boolean {
                LoadQuery("%$query%")
                return false
            }

            override fun onQueryTextChange(newText: String?): Boolean {
                LoadQuery("%$newText%")
                return false
            }
        })
        return super.onCreateOptionsMenu(menu)
    }
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when(item.itemId){
            R.id.dodaj_notatke->{
                startActivity(Intent(this,AddNote::class.java))
            }
            R.id.sortuj->{
                showSortDialog()
            }
        }
        return super.onOptionsItemSelected(item)
    }

    private fun showSortDialog() {
        //lista opcji
        val sortOption = arrayListOf("Najnowsze","starsze","Tytul rosnaco","Tytul malejaco")
        val mBuilder = AlertDialog.Builder(this)
        mBuilder.setTitle("Sort by")
        mBuilder.setIcon(R.drawable.ic_sort)

    }




    inner class MylistApdater(
        context: Context,
        private var ListaWynikowAdapter: ArrayList<FIrebaseVal>
    ) : BaseAdapter() {
        var listWynikiArray = ArrayList<FIrebaseVal>()
        var context: Context? = context

        @SuppressLint("ViewHolder","InflateParams")
        override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
            val myView = layoutInflater.inflate(R.layout.row1, null)
            val Wynik = ListaWynikowAdapter[position]
            myView.stezenienumberpicker.text = Wynik.nodeNumberPicker.toString()
            myView.godzina.text = Wynik.nodezegar
            myView.data.text = Wynik.nodedata
            myView.posilekRG.text = Wynik.nodeposilek
            myView.SP1.text = Wynik.nodehiperglikemia
            myView.SP2.text = Wynik.nodestres
            myView.SP3.text = Wynik.nodesamopoczucie
            //Przycisk kasowania
            myView.deleteBtn.setOnClickListener {
                val dbMenager = DbMenager(this.context!!)
                val selectionArgs = arrayOf(Wynik.nodeID.toString())
                dbMenager.delete("ID=?", selectionArgs)
                LoadQuery("%")
            }
            return myView
        }

        override fun getItem(position: Int): Any {
            return ListaWynikowAdapter[position]
        }

        override fun getItemId(position: Int): Long {
            return position.toLong()

        }

        override fun getCount(): Int {
            return ListaWynikowAdapter.size

        }

    }
    private fun GoToUpdateFun(Wyniki: FIrebaseVal) {
        val intent = Intent(this,AddPomiary::class.java)
        intent.putExtra("Id",Wyniki.nodeID)//wpisz Id
        intent.putExtra("Stezenie",Wyniki.nodeNumberPicker)
        intent.putExtra("Zegar",Wyniki.nodezegar)
        intent.putExtra("Data",Wyniki.nodedata)
        intent.putExtra("Posilek",Wyniki.nodeposilek)
        intent.putExtra("Hiperglikemia",Wyniki.nodehiperglikemia)
        intent.putExtra("Stres",Wyniki.nodestres)
        intent.putExtra("Samopoczucie",Wyniki.nodesamopoczucie)
        startActivity(intent)

    }
}

DBMENAGER

package com.example.apkadlapacjenta

import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import android.database.sqlite.SQLiteQueryBuilder
import android.widget.RadioGroup
import android.widget.Toast

class DatebaseMenagerPomiary(context: Context) {

    //Database name
    var dbName = "Historia Pomiarów"
    //table name
    var dbTable = "Wyniki"
    //kolumny
    var colID = "Id"
    var colStezenie = "Stezenie"
    var colZegar = "Zegar"
    var colData = "Data"
    var colPosilek = "Posilek"
    var colStres = "Stres"
    var colSamopoczucie = "Samopoczucie"
    var colHiperglikemia = "Hiperglikemia"

    //wersja
    var dbVersion = 1

    //Tworzymy tabele
    val sqlCreateTable =
        "CREATE TABLE$dbTable($colID INTEGER PRIMARY KEY, $colStezenie TEXT, $colZegar TEXT, $colData TEXT, $colPosilek TEXT, $colStres TEXT,$colSamopoczucie TEXT, $colHiperglikemia TEXT)"

    var sqlDB: SQLiteDatabase? = null

    init {
        val db = DatabaseHelperWyniki(context)
        sqlDB = db.writableDatabase
    }


     inner class DatabaseHelperWyniki : SQLiteOpenHelper {
        var context: Context? = null
         constructor(context: Context) : super(context, dbName, null, dbVersion) {
            this.context = context
        }

        override fun onCreate(db: SQLiteDatabase?) {
            db!!.execSQL(sqlCreateTable)
            Toast.makeText(this.context,"baza danych utworzona...",Toast.LENGTH_SHORT).show()

        }

        override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
            db!!.execSQL("zamknij tabele jeśli nie istnieje" + dbTable)
        }


    }

    fun  insert(values:ContentValues):Long{
        val ID  = sqlDB!!.insert(dbTable,"",values)
        return ID
    }
    fun Query(projection:Array<String>,selection:String,selectionArgs:Array<String>,sorOrder:String): Cursor {

        val qb = SQLiteQueryBuilder()
        qb.tables=dbTable
        val cursor = qb.query(sqlDB,projection,selection,selectionArgs,null,null,sorOrder)
        return cursor
    }

    fun delete(selection: String,selectionArgs: Array<String>):Int{
        val count = sqlDB!!.delete(dbTable,selection,selectionArgs)
        return count
    }

    fun update(values:ContentValues,selection: String,selectionArgs: Array<String>): Int {
        val count = sqlDB!!.update(dbTable,values,selection,selectionArgs)
        return count
    }



}

УЗЕЛ КЛАССА не видно по имени: D

package com.example.apkadlapacjenta



class FIrebaseVal(
    nodeID: Int, nodeNumberPicker:String,
    nodezegar:String,
    nodedata:String,
    nodeposilek: String,
    nodehiperglikemia: String,
    nodestres: String,
    nodesamopoczucie: String
    ) {
    var nodeID: Int?= nodeID
    var nodeNumberPicker: String? = nodeNumberPicker
    var nodezegar:String?=nodezegar
    var nodedata:String?=nodedata
    var nodeposilek: String? =nodeposilek
    var nodehiperglikemia:String?=nodehiperglikemia
    var nodestres:String?=nodestres
    var nodesamopoczucie:String?=nodesamopoczucie
}

Товарищи, можете ли вы объяснить мне, что не так? Thx

Ответы [ 2 ]

0 голосов
/ 12 января 2020

Я полагаю, что ваша проблема может быть связана со строкой: -

val sqlCreateTable =
    "CREATE TABLE$dbTable($colID INTEGER PRIMARY KEY, $colStezenie TEXT, $colZegar TEXT, $colData TEXT, $colPosilek TEXT, $colStres TEXT,$colSamopoczucie TEXT, $colHiperglikemia TEXT)"

Между ключевым словом TABLE и именем таблицы нет пробела.

Попробуйте изменить на: -

val sqlCreateTable =
        "CREATE TABLE $dbTable($colID INTEGER PRIMARY KEY, $colStezenie TEXT, $colZegar TEXT, $colData TEXT, $colPosilek TEXT, $colStres TEXT,$colSamopoczucie TEXT, $colHiperglikemia TEXT)"

А затем после удаления приложения или удаления данных приложения попробуйте выполнить повторный запуск.

0 голосов
/ 12 января 2020

Возможно, вы добавили этот столбец, но забыли добавить миграцию из старой версии базы данных. Вы можете проверить это, очистив все данные приложения (или удалить и установить его). Если переустановка решит проблему, вы должны создать миграцию от старой версии базы данных к новой

. Также вы можете реорганизовать всю свою базу данных, чтобы использовать Комната вместо уродливого ORMLite. Это дружественная и мощная библиотека персистентности от Google

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...