SQLiteを利用して、データベースにある情報をListViewに表示するアプリを作っています。
このアプリに、タッチした行のデータベースを削除する機能を追加したいのですが、
delete (String table, String whereClause, String[] whereArgs)
(Android Developers: SQLiteDatabase)
のwhereClauseとwhereArgsに何の情報を入れればできるのかが分かりません。
ご存知の方、ぜひご教授をよろしくお願いいたします。
(以下、コード一部抜粋)
(MainActivity.kt) package com.komugi.haiga.samplesqlite import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.support.v7.app.AlertDialog import android.widget.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) fun show() { //データベースに登録されている文字列の一覧を得る val texts = queryTexts(this) val listView = findViewById<ListView>(R.id.listView) listView.adapter = ArrayAdapter<MutableList<String>>(this, R.layout.list_text_row, R.id.textView, texts) } val button = findViewById<Button>(R.id.button) button.setOnClickListener { val editText = findViewById<EditText>(R.id.editText) insertText(this, editText.text.toString()) show() } val buttonDelete = findViewById<Button>(R.id.button_delete) buttonDelete.setOnClickListener { //全削除する前に確認する AlertDialog.Builder(this) .setTitle("全削除") .setMessage("全削除します") .setNegativeButton("Cancel", null) .setPositiveButton("OK") { _, _ -> //データベースを全削除する deleteText(this) show() }.show() } val adapter = ArrayAdapter<String>(this, R.layout.list_text_row, R.id.textView) val selectedList = findViewById<ListView>(R.id.listView) selectedList.adapter = adapter selectedList.setOnItemClickListener { _, _, position, _ -> AlertDialog.Builder(this) .setTitle("削除") .setMessage("削除します") .setNegativeButton("Cancel", null) .setPositiveButton("OK") {_, _ -> deleteItem(this, ids[position]) show() }.show() } } }
(SampleDatabase.kt) package com.komugi.haiga.samplesqlite import android.content.ContentValues import android.content.Context import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper private const val DB_NAME = "SampleDatabase" private const val DB_VERSION = 1 fun queryTexts(context: Context) : Array<MutableList<String>> { //読み込み用のデータベースを開く val database = SampleDatabaseOpenHelper(context).readableDatabase //データベースから全件検索する val cursor = database.query("texts", null, null, null, null, null,"created_at DESC") val texts = mutableListOf<String>() val ids = mutableListOf<String>() cursor.use { //カーソルで順次処理していく while(cursor.moveToNext()) { //保存されているテキストを得る val text = cursor.getString(cursor.getColumnIndex("text")) val id = cursor.getString(cursor.getColumnIndex("id")) texts.add(text) ids.add(id) } } val resArray = arrayOf(texts) database.close() return resArray } fun insertText(context: Context, text: String) { //書き込み可能なデータベースを開く val database = SampleDatabaseOpenHelper(context).writableDatabase database.use { db -> //挿入するレコード val record = ContentValues().apply { put("text", text) } //データベースに挿入する db.insert("texts", null, record) } } //データベース全削除機能 fun deleteText(context: Context) { val database = SampleDatabaseOpenHelper(context).writableDatabase database.use { db -> db.delete("texts", null, null) } } //データベース選択削除機能 fun deleteItem(context: Context, id: String) { val database = SampleDatabaseOpenHelper(context).writableDatabase database.use { db -> db.delete("texts", "id =" + id, null) } } class SampleDatabaseOpenHelper(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) { override fun onCreate(db: SQLiteDatabase?) { //テーブルの作成 db?.execSQL("CREATE TABLE texts ( " + " id INTEGER PRIMARY KEY AUTOINCREMENT, "+ " text TEXT NOT NULL, " + " created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP) ") } override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) { //バージョン更新時のSQL発行 } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/25 10:18
2018/07/25 13:05
2018/07/25 13:18
2018/07/25 13:58
2018/07/25 14:49
2018/07/25 15:00
2018/07/26 08:18
2018/07/26 08:29
2018/07/26 09:05
2018/07/26 10:12
2018/07/27 02:16
2018/07/27 14:35
2018/07/28 17:35