«kotlin» ищет данные в editTextText в sqlite

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

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

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

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

MainActivity.kt

binding.button3.setOnClickListener{
            var data = db.readData()
            binding.textView.text  = ""
            /*for (i in 0 until data.size){
                binding.textView.append(data.get(i).id.toString()+" "
                        +data.get(i).adsoyad+" "+data.get(i).yasi+"\n")}*/
            for (i in 0 until data.size){
               if (binding.editTextText2.toString()==data.get(i).adsoyad){binding.textView.append(data.get(i).adsoyad+"\n")}
                else{binding.textView.text = "yeni"+"\n"}

            }

    }

DataBaseHelper.kt

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

val database_name = "veritabanim"
val table_name = "kullanicilar"
val col_name = "adisoyadi"
val col_age = "yasi"
val col_id = "id"
class DataBaseHelper (var context: Context):SQLiteOpenHelper(context,
    database_name,null,1) {
    override fun onCreate(p0: SQLiteDatabase?) {
        var createTable = " CREATE TABLE "+ table_name+"("+
                col_id +" INTEGER PRIMARY KEY AUTOINCREMENT,"+
                col_name +" VARCHAR(256),"+
                col_age +" INTEGER)"
        p0?.execSQL(createTable)
    }

    override fun onUpgrade(p0: SQLiteDatabase?, p1: Int, p2: Int) {
        TODO("Not yet implemented")
    }
    fun insertData(kullanici: kullanici){
        val db =this.writableDatabase
        val cv = ContentValues()
        cv.put(col_name,kullanici.adsoyad)
        cv.put(col_age,kullanici.yasi)
        var sonuc =db.insert(table_name,null,cv)
        if (sonuc ==(-1).toLong()){
            Toast.makeText(context,"hatali",Toast.LENGTH_LONG).show()
        }else{
            Toast.makeText(context,"başsarili",Toast.LENGTH_LONG).show()
        }
    }

    fun readData(): MutableList<kullanici> {
        var liste:MutableList<kullanici> = ArrayList()
        val db = this.writableDatabase
        var sorgu = "Select * from "+table_name
        var sonuc = db.rawQuery(sorgu,null)
        if (sonuc.moveToFirst()){
            do {
                var kullanici = kullanici()
                kullanici.yasi = sonuc.getString(sonuc.getColumnIndexOrThrow(col_age)).toInt()
                kullanici.id = sonuc.getString(sonuc.getColumnIndexOrThrow(col_id)).toInt()
                kullanici.adsoyad = sonuc.getString(sonuc.getColumnIndexOrThrow(col_name))
                liste.add(kullanici)
            }while (sonuc.moveToNext())
        }
        sonuc.close()
        db.close()
        return liste
    }



}

kullanici.kt

class kullanici {
    var id:Int=0
    var adsoyad:String = ""
    var yasi:Int=0
    constructor(adsoyad:String,yasi:Int){
        this.adsoyad =adsoyad
        this.yasi =yasi
    }
    constructor(){}
}

приведи мне пример, что ты хочешь сделать? вы пытаетесь найти данные и распечатать их в текстовом виде?

Laser 22.02.2024 12:21

пользователь напишет текст в текст редактирования и нажмет кнопку. если написанный им текст существует в столбце col_name в базе данных, он запишет текст в textview, если нет, то напишет не найден.

Sezar 22.02.2024 12:42

Я создал аналогичный проект, чтобы понять sqlite... могу ли я помочь вам с этим кодом? тебе это надо?

Laser 22.02.2024 12:53

"Возможно. я также работаю, чтобы учиться. если вы поделитесь этим здесь, я изучу это и постараюсь понять.

Sezar 22.02.2024 14:20
1
4
203
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Для управления Sqlite вы можете написать функцию управления в разделе DAO, то есть в разделе операций, как на первом фото, эта функция проверяет, сколько там этих данных. В моем примере я проверял по id, вы можете проверить по другим уникальным данным. На втором рисунке этот элемент управления запускается, часть Bundle.id — это мои входящие данные, вы можете сохранить свои собственные данные, и если данные элемента управления !=0, вы можете сказать «Печать» в textview. В этом примере я использую его для контроля, чтобы при добавлении данных в корзину не добавлялись одни и те же данные.

Я не за компьютером, поэтому пытаюсь. если то, что вы написали, даст нужное мне количество данных или предотвратит повторный ввод тех же данных, это не то, чего я хочу. Я понимаю это из Google Translate. у меня есть edittextim, в котором я сохранил имя в базе данных. я хочу проверить базу данных, используя другой текст редактирования. я хочу распечатать результат в текстовом представлении. если есть, то он напишет нужные мне данные, или напишет не найдено.

Sezar 26.02.2024 10:07

Извините, я не могу вам помочь, я использую контрольный код вместо поиска, чтобы проверить, существуют ли данные. Надеюсь, ты найдешь ответ

Ali Sağlık 26.02.2024 11:16

Пожалуйста, [изменить✏️] вставьте текст, использованный на изображении, в свой ответ, чтобы его можно было прочитать на всех устройствах, отредактировать, скопировать как текст и найти с помощью поиска. В нынешнем виде ваше изображение затрудняет просмотр и использование вашего ответа. См. документацию по форматированию📖 , где вы найдете советы, как сделать текст красивым, не прибегая к изображениям.

dan1st 07.03.2024 15:47
Ответ принят как подходящий

Хорошо, как вы и просили, я делюсь здесь фрагментом необходимого кода, чтобы вы могли реализовать то же самое, посмотрев это.

Прежде всего, это функция поиска по базе данных в файле DataBaseHelper.kt.

1. Сценарий: вам нужно только то слово, которое вы ввели в текст редактирования.

    fun searchUser(name: String): ArrayList<kullanici> {
        val db = this.readableDatabase
        val model: ArrayList<kullanici> = ArrayList<kullanici>()
        val cursor = db.rawQuery("SELECT * FROM user_details WHERE username =? ", arrayOf(name))
        if (cursor != null && cursor.moveToFirst()) {
            do {  
             //here we have to add the fields to the model from database. 
             //in your case it is 3 beacause you have 3 columns.

               model.add(kullanici(cursor.getString(1),
               cursor.getString(2),
               cursor.getString(3)))
        
            } while (cursor.moveToNext())
            cursor.close()
        }
        return model
    }

Примечание. Я взял список массивов, потому что моя база данных может иметь несколько одинаковых имен. Вы можете настроить его в соответствии с вашими требованиями.

2-й сценарий: если вы введете приложение, оно вернет все записи, в которых есть приложение. например. яблоко, приложение, приложение и т. д.

Для этого вам просто нужно немного изменить запрос. val cursor = db.rawQuery("SELECT * FROM user_details WHERE username LIKE \"%$name%\"",null)

Теперь вы вызываете функцию в своем действии или фрагменте следующим образом. Я использовал recyclerView, но, поскольку вы использовали textView, я настроил код для вас.

   btnSearch.setOnClickListener{
           val str = edtSearch.text.toString()
           if (str.isNotEmpty()){
               val searchData = dBhandler.searchUser(str)

//as you have multiple data in aaray list and arraylist returns your model you cannot directly set in text view. as "adsoyad" is your name field i guess
               val sb = StringBuilder()
               searchData.forEach{
                sb.append(it.adsoyad).append("\n")
                 }
               txtName.text = sb.toString()
           }
           else{
               Toast.makeText(this,"No Matching entries found",Toast.LENGTH_SHORT).show()
           }
       }

Управляйте arrayList в соответствии с вашими требованиями. Вы можете возвращать только строку в помощнике базы данных, если вы не разрешаете несколько имен в базе данных. В противном случае, если у вас есть несколько записей с одинаковыми именами, рекомендуется установить эти имена в recyclerview вместо textView.

Короче говоря: сделайте обзор и управляйте соответствующим образом. Главным был вопрос, который я вам дал. Надеюсь это поможет

я попробую при первой возможности

Sezar 26.02.2024 10:10

в моем коде user_details — это имя моей таблицы, а username — имя столбца.

Laser 26.02.2024 10:34

Кажется, я снова где-то ошибаюсь. в моей базе данных есть 2 результата по слову, которое я ищу. вывод: [com.example.sqlite.kullanici@42a41bc0,com.example.sqlite.ku‌​llanici@42a41ce8] я вас очень утомляю, извините

Sezar 26.02.2024 14:44

@Sezar, какую функциональность вы хотите, если результатов больше одного? вы хотите напечатать этот результат два раза или только один? или сделать что-то еще?

Laser 27.02.2024 06:11

Я хочу это. чем больше результатов, тем больше я хочу напечатать. проблема в том, что вывод неправильный. Где-то я делаю это неправильно. Я добавил картинку к вопросу. у меня проблемы и коды.

Sezar 27.02.2024 08:58

@Sezar Я только что увидел ваши изображения и соответственно изменил код, просто добавьте эту часть после комментариев. Я объяснил, почему это нужно использовать. ПРИМЕЧАНИЕ.** Если у вас одно и то же имя 5 раз, текстовое представление будет иметь одно и то же имя 5 раз. Если вы хотите один раз, просто удалите для каждого и напрямую установите 0-й индекс для textView.

Laser 27.02.2024 12:13

Надеюсь, теперь ваш вопрос решится, если нет. дайте мне знать

Laser 27.02.2024 12:14

Хорошо. я скопировал и вставил ваши коды. Я исправил это, внеся несколько небольших изменений. Я вам очень благодарен. ты нашел время для меня. теперь давайте не будем пытаться понять эти вещи, и мне придется учиться. это было мое приложение для обучения sqlite. после тщательного изучения я мысленно интегрирую его в свое приложение. Я благодарен тебе

Sezar 27.02.2024 13:53

не нужно благодарить... мы здесь, чтобы помочь... если это сработает для вас, пожалуйста, примите ответ и проголосуйте за него, чтобы, если кто-то столкнется с такой проблемой, он мог легко найти ответ.

Laser 27.02.2024 14:09

к сожалению, моей репутации недостаточно, чтобы я мог проголосовать. когда я достигну 15 репутации, я вернусь и проголосую.

Sezar 27.02.2024 14:14

этого достаточно, чтобы принять в качестве ответа. Я рад, что мой код/логика вам помог

Laser 27.02.2024 14:21

Другие вопросы по теме