在Android Studio Kotlin中从SQLite数据库中删除数据



我刚开始用Kotlin在Android Studio中编码,我觉得我的代码到处都是。现在,我正在尝试从存储药物信息的数据库中添加/删除,包括药物名称,强度和方向。到目前为止,我已经成功地添加到数据库中;但是,从数据库中删除选择项让我难倒了。

这是显示当前添加到列表中的药物列表:


import android.app.SearchManager
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.*
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.med_list.*
import kotlinx.android.synthetic.main.medication_info.view.*


class MedListActivity: AppCompatActivity() {
var listOfMedication = ArrayList<Medication>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.med_list)
LoadQuery("%")
}
fun LoadQuery(name:String){
var dbManager = DatabaseManager(this)
val projections = arrayOf("ID", "Medication", "Strength", "Directions")
val selectionArgs=arrayOf(name)
val cursor = dbManager.Query(projections, "Medication like ? ", selectionArgs, "Medication")
listOfMedication.clear()
if(cursor.moveToFirst()){
do{
val ID = cursor.getInt(0)
val Medication = cursor.getString(cursor.getColumnIndex("Medication"))
val Strength = cursor.getString(cursor.getColumnIndex("Strength"))
val Directions = cursor.getString(cursor.getColumnIndex("Directions"))
listOfMedication.add(Medication(ID, Medication, Strength, Directions))
}while (cursor.moveToNext())
}
var MedicationAdapter = MedicationAdapter(listOfMedication)
tvListMedication.adapter = MedicationAdapter

}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main_menu,menu)
val sv = 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 {
override fun onQueryTextSubmit(query: String?): Boolean {
Toast.makeText(applicationContext, query, Toast.LENGTH_LONG).show()
LoadQuery("%" + query + "%")
return false
}
override fun onQueryTextChange(p0: String?): Boolean {
return false
}
})

return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item != null) {
when (item.itemId) {
R.id.addMedButton -> {
var intent = Intent(this, AddToMedListActivity::class.java)
startActivity(intent)
}
}
}
return super.onOptionsItemSelected(item)
}

inner class MedicationAdapter : BaseAdapter {
var listOfMedicationAdapter = ArrayList<Medication>()

constructor(listOfMedicationAdapter: ArrayList<Medication>) : super() {
this.listOfMedicationAdapter = listOfMedication
}
override fun getCount(): Int {
return listOfMedicationAdapter.size
}
override fun getItem(p0: Int): Any {
return listOfMedicationAdapter[p0]
}
override fun getItemId(p0: Int): Long {
return p0.toLong()
}
override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
val medication = listOfMedicationAdapter[p0]
var myView = layoutInflater.inflate(R.layout.medication_info,null)
myView.tvName.text = medication.name!!
myView.tvStrength.text = medication.strength!!
myView.tvDirections.text = medication.directions!!
return myView
}
}
}

这是我的数据库管理器


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.SQLiteQuery
import android.database.sqlite.SQLiteQueryBuilder
import android.widget.Toast
class DatabaseManager {
companion object {
val dbName = "Medication List"
val dbTable = "Medications"
val colID = "ID"
val colName = "Medication"
val colStrength = "Strength"
val colDirections = "Directions"
val dbVersion = 1
val sqlCreateTable = "CREATE TABLE IF NOT EXISTS " +
dbTable + " (" +
colID + " INTEGER PRIMARY KEY, " +
colName + " TEXT, " +
colStrength + " TEXT, " +
colDirections + " TEXT);"
}
var sqlDB: SQLiteDatabase? = null
constructor(context:Context){
var db = DataBaseHelperMedications(context)
sqlDB = db.writableDatabase
}
inner class DataBaseHelperMedications:SQLiteOpenHelper{
var context: Context?=null
constructor(context: Context):super(context,dbName,null, dbVersion){
this.context=context
}
override fun onCreate(p0: SQLiteDatabase?) {
p0!!.execSQL(sqlCreateTable)
Toast.makeText(this.context, "database is created",Toast.LENGTH_LONG).show()
}
override fun onUpgrade(p0: SQLiteDatabase?, p1: Int, p2: Int) {
p0!!.execSQL("Drop table IF EXISTS " + dbTable)
}
}
fun Insert(values:ContentValues):Long{
val ID = sqlDB!!.insert(dbTable, "",values)
return ID
}
fun Query(projection:Array<String>, selection:String, selectionArgs:Array<String>, sortOrder:String): Cursor {
val qb= SQLiteQueryBuilder()
qb.tables=dbTable
val cursor = qb.query(sqlDB, projection, selection, selectionArgs, null, null, sortOrder)
return cursor
}
}

这是添加到药物列表的活动:


import android.content.ContentValues
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.add_to_med_list.*
class AddToMedListActivity: AppCompatActivity() {
val dbTable = "Medications"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.add_to_med_list)
}
fun buAdd(view: View){
finish()
var dbManager = DatabaseManager(this)
var values = ContentValues()
values.put("Medication", editTextMedicationName.text.toString())
values.put("Strength", editTextMedicationStrength.text.toString())
values.put("Directions", editTextMedicationDirections.text.toString())
val ID = dbManager.Insert(values)
if (ID>0){
Toast.makeText(this, "Medication is added", Toast.LENGTH_LONG).show()
}else{
Toast.makeText(this, "Cannot add Medication", Toast.LENGTH_LONG).show()
}
}
}

谢谢你的帮助!

从数据库中删除选择让我难住了

您可以使用方便的delete方法。

fun Delete(id: Long):int{
/* returns # of rows deleted (would be 1 or 0 if id is primary key) */
return sqlDB!!.delete(dbTable,"id=?",arrayOf(id)
}

最新更新