E/SQLiteLog: (1) no such table: как подключить внешнюю базу данных SQLite с данными в Android Studio проект с языком программирования Kotlin

Хочу написать офлайн словарь у меня есть .db файл с "_id, word, description", хочу подключить эту базу данных в Котлин проект для считывания данных оттуда. В интернете очень мало туториалов на Котлин, уже третий день пытаюсь разными способами выполнить задачу, но без успеха. Нашел туториал где все вроде именно так как я хотел, строка с AutoCompleteTextView, куда вводишь слово для поиска и считывая с базы выдает слово. Удалось даже cкопировать .db в 'data/data/"projectname"/database' но дальше считывать не получается, в этом этапе просто нужно чтобы при поиске на AutoCompleteTextView выводились слова со столбца word. Проект состоит из 3 файлов: MainActivity.kt, DbHelper.kt, activity_main.xml

MainActivity.kt

package com.fabrikam.dictionary

import android.database.sqlite.SQLiteDatabase
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.widget.ArrayAdapter
import android.widget.AutoCompleteTextView



class MainActivity : AppCompatActivity() {


    lateinit var dbHelper: DbHelper
    lateinit var searchv: AutoCompleteTextView

    var sugList = ArrayList<String>()

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

        dbHelper = DbHelper(this, "database.db", 1)
        dbHelper.checkDb()


        searchv = findViewById<AutoCompleteTextView>(R.id.idSearchView)
        var adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1,  sugList)



        searchv.addTextChangedListener(object: TextWatcher{



            override fun afterTextChanged(p0: Editable?) {

            }

            override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

            }

            override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
               sugList.addAll(dbHelper.searchSugg(p0.toString()))
                searchv.setAdapter(adapter)
            }

            })
        }

    }


DbHelper.kt

package com.fabrikam.dictionary

import android.content.Context
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import android.util.Log
import java.io.FileOutputStream

class DbHelper (context:Context, name: String, version: Int): SQLiteOpenHelper(context, name, null, version){

    var mcontext: Context
    var dbName: String
    var dbPath: String

    init {
        mcontext = context
        dbName = name
        dbPath = "/data/data" + "com.fabrikam.dictionary" + "/databases/"
    }


    override fun onCreate(p0: SQLiteDatabase?) {
        //TODO("Not yet implemented")
    }

    override fun onUpgrade(p0: SQLiteDatabase?, p1: Int, p2: Int) {
        // TODO("Not yet implemented")
    }

    fun checkDb (){
        try {
            var filePath = mcontext.getDatabasePath(dbName)
            if (!filePath.exists()) copyDatabase()
            else  Log.d("Copydb", "db already available")
        } catch (e: Exception){
            e.stackTrace
        }
    }

    fun copyDatabase(){
        this.readableDatabase
        Log.d("Copydb", "Creating a new copy from a asset fonder")


        try {
            var ios = mcontext.assets.open(dbName)
            var os = FileOutputStream(dbPath +dbName)

            var buffer = ByteArray(1024)
            var len = ios.read(buffer)

            while ((len)> 0){
                os.write(buffer, 0, len)
                len = ios.read(buffer)

            }

            ios.close()
            os.close()
            os.flush()
        } catch (e: java.lang.Exception){
            e.stackTrace
        }
        Log.d("Copydb", "db copied")
    }


    fun searchSugg(query: String): ArrayList<String>{

        var tableName = "content"
        var colName = "word"

        var list = ArrayList<String>()
        var db  = this.readableDatabase

        var cursor: Cursor = db.query(
            tableName,
            arrayOf(colName),
            colName + " LIKE ?",
            arrayOf(query + "%"),
            null, null,
            colName
        )

        var index = cursor.getColumnIndex(colName)
        while (cursor.moveToNext()){
            list.add(cursor.getString(index))
        }

        return list
    }

}



activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <TextView

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Enter your word"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="16dp"
        android:textSize="30dp"
        android:textColor="@color/black"
         />


    <AutoCompleteTextView
        android:id="@+id/idSearchView"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="16dp"
        android:hint="Here..."/>
</LinearLayout>

и скрин от database.db

введите сюда описание изображения

введите сюда описание изображения

выдает ошибку, E/SQLiteLog: (1) no such table: content, в database.db файле нет таблицы :content, но как видно со скринов SQLite manager отвечает на запросы и выдает данные. Удалил программу с AVD , удалил папку программы с data/data/, создал новый AVD, запустил на телефоне, поменял дб версию на 2, ни одно не помогло. Программа запускается, но когда пытаешься вводить текст программа ломается и выдает ошибку ниже. Буду благодарен за помощь.

E/SQLiteLog: (1) no such table: content
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.fabrikam.dictionary, PID: 11126
    android.database.sqlite.SQLiteException: no such table: content (code 1): , while compiling: SELECT  word  FROM  content  WHERE  word  LIKE ? ORDER BY  word
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:890)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:501)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1392)
        at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1239)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1110)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1278)
        at com.fabrikam.dictionary.DbHelper.searchSugg(DbHelper.kt:82)
        at com.fabrikam.dictionary.MainActivity$onCreate$1.onTextChanged(MainActivity.kt:48)
        at android.widget.TextView.sendOnTextChanged(TextView.java:9364)
        at android.widget.TextView.handleTextChanged(TextView.java:9451)
        at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:11926)
        at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1252)
        at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:573)
        at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:504)
        at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:502)
        at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:843)
        at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:616)
        at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:396)
        at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 

Ответы (0 шт):