введите сюда описание изображения
введите сюда описание изображения
введите сюда описание изображения
-если данные в 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(){}
}
пользователь напишет текст в текст редактирования и нажмет кнопку. если написанный им текст существует в столбце col_name в базе данных, он запишет текст в textview, если нет, то напишет не найден.
Я создал аналогичный проект, чтобы понять sqlite... могу ли я помочь вам с этим кодом? тебе это надо?
"Возможно. я также работаю, чтобы учиться. если вы поделитесь этим здесь, я изучу это и постараюсь понять.
введите сюда описание изображения
введите сюда описание изображения
Для управления Sqlite вы можете написать функцию управления в разделе DAO, то есть в разделе операций, как на первом фото, эта функция проверяет, сколько там этих данных. В моем примере я проверял по id, вы можете проверить по другим уникальным данным. На втором рисунке этот элемент управления запускается, часть Bundle.id — это мои входящие данные, вы можете сохранить свои собственные данные, и если данные элемента управления !=0, вы можете сказать «Печать» в textview. В этом примере я использую его для контроля, чтобы при добавлении данных в корзину не добавлялись одни и те же данные.
Я не за компьютером, поэтому пытаюсь. если то, что вы написали, даст нужное мне количество данных или предотвратит повторный ввод тех же данных, это не то, чего я хочу. Я понимаю это из Google Translate. у меня есть edittextim, в котором я сохранил имя в базе данных. я хочу проверить базу данных, используя другой текст редактирования. я хочу распечатать результат в текстовом представлении. если есть, то он напишет нужные мне данные, или напишет не найдено.
Извините, я не могу вам помочь, я использую контрольный код вместо поиска, чтобы проверить, существуют ли данные. Надеюсь, ты найдешь ответ
Пожалуйста, [изменить✏️] вставьте текст, использованный на изображении, в свой ответ, чтобы его можно было прочитать на всех устройствах, отредактировать, скопировать как текст и найти с помощью поиска. В нынешнем виде ваше изображение затрудняет просмотр и использование вашего ответа. См. документацию по форматированию📖 , где вы найдете советы, как сделать текст красивым, не прибегая к изображениям.
Хорошо, как вы и просили, я делюсь здесь фрагментом необходимого кода, чтобы вы могли реализовать то же самое, посмотрев это.
Прежде всего, это функция поиска по базе данных в файле 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.
Короче говоря: сделайте обзор и управляйте соответствующим образом. Главным был вопрос, который я вам дал. Надеюсь это поможет
я попробую при первой возможности
в моем коде user_details — это имя моей таблицы, а username — имя столбца.
Кажется, я снова где-то ошибаюсь. в моей базе данных есть 2 результата по слову, которое я ищу. вывод: [com.example.sqlite.kullanici@42a41bc0,com.example.sqlite.kullanici@42a41ce8] я вас очень утомляю, извините
@Sezar, какую функциональность вы хотите, если результатов больше одного? вы хотите напечатать этот результат два раза или только один? или сделать что-то еще?
Я хочу это. чем больше результатов, тем больше я хочу напечатать. проблема в том, что вывод неправильный. Где-то я делаю это неправильно. Я добавил картинку к вопросу. у меня проблемы и коды.
@Sezar Я только что увидел ваши изображения и соответственно изменил код, просто добавьте эту часть после комментариев. Я объяснил, почему это нужно использовать. ПРИМЕЧАНИЕ.** Если у вас одно и то же имя 5 раз, текстовое представление будет иметь одно и то же имя 5 раз. Если вы хотите один раз, просто удалите для каждого и напрямую установите 0-й индекс для textView.
Надеюсь, теперь ваш вопрос решится, если нет. дайте мне знать
Хорошо. я скопировал и вставил ваши коды. Я исправил это, внеся несколько небольших изменений. Я вам очень благодарен. ты нашел время для меня. теперь давайте не будем пытаться понять эти вещи, и мне придется учиться. это было мое приложение для обучения sqlite. после тщательного изучения я мысленно интегрирую его в свое приложение. Я благодарен тебе
не нужно благодарить... мы здесь, чтобы помочь... если это сработает для вас, пожалуйста, примите ответ и проголосуйте за него, чтобы, если кто-то столкнется с такой проблемой, он мог легко найти ответ.
к сожалению, моей репутации недостаточно, чтобы я мог проголосовать. когда я достигну 15 репутации, я вернусь и проголосую.
этого достаточно, чтобы принять в качестве ответа. Я рад, что мой код/логика вам помог
приведи мне пример, что ты хочешь сделать? вы пытаетесь найти данные и распечатать их в текстовом виде?