SQLiteデータベースの使い方についての質問です。データベースのmeditation2というテーブルの中にtakerというカラムが"1"のレコードが数件入っています。そのtakerが"1"のものをSELECT文で読み込んでandrroid画面にListViewで表示したく思います。しかしSELECT文のWHEREの後に変数を使った以下のコードではデータは表示されず最終の「新規」の行しか出ません。一方SQL文をWHERE句の後のwTakerの部分を直接'1'に書き直して一組の二重引用符で囲んだ一本のSQL文にするとうまくいってtaker="1"のレコードが全部表示されます。カラムの値の誤りではありません。意図通りにレコードを読み出すにはコードをどう改善したらよいでしょう。
java
1package com.onoko.portfolio.android.medicine; 2 3import androidx.appcompat.app.AppCompatActivity; 4 5import android.content.Intent; 6import android.database.Cursor; 7import android.database.sqlite.SQLiteDatabase; 8import android.os.Bundle; 9import android.view.View; 10import android.widget.AdapterView; 11import android.widget.ListView; 12import android.widget.SimpleAdapter; 13 14import java.util.ArrayList; 15import java.util.HashMap; 16import java.util.List; 17import java.util.Map; 18 19public class MainActivity extends AppCompatActivity { 20 private ListView lvDrugs; 21// private List<Map<String,String>> drugs = new ArrayList<>(); 22 private static final String[] FROM = {"name","unit"}; 23 private static final int[] TO ={R.id.tvNameRow,R.id.tvUnitRow}; 24 private DatabaseHelper _helper; 25 26 27 @Override 28 protected void onCreate(Bundle savedInstanceState) { 29 super.onCreate(savedInstanceState); 30 setContentView(R.layout.activity_main); 31 32 ListView lvDrugs = findViewById(R.id.lvDrugs); 33 List<Map<String,String>>drugs =getDrugs("1"); 34 SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, drugs, R.layout.row, FROM, TO); 35 lvDrugs.setAdapter(adapter); 36 37 lvDrugs.setOnItemClickListener(new ListItemClickListener()); 38 39 } 40 41 protected void onStart() { 42 super.onStart(); 43 44 ListView lvDrugs = findViewById(R.id.lvDrugs); 45 Intent intentSub = getIntent(); 46 List<Map<String, String>> drugs = getDrugs(intentSub.getStringExtra("taker")); 47 48 SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, drugs, R.layout.row, FROM, TO); 49 lvDrugs.setAdapter(adapter); 50 51 lvDrugs.setOnItemClickListener(new ListItemClickListener()); 52 53 } 54 55 private List<Map<String,String>> getDrugs (String wTaker){ 56 _helper = new DatabaseHelper(MainActivity.this); 57 SQLiteDatabase db = _helper.getWritableDatabase(); 58 Cursor cursor = db.rawQuery("SELECT * FROM medication2 WHERE taker ='"+wTaker+"'", null); 59 List<Map<String,String>> wDrugs = new ArrayList<>(); 60 int i; 61 while (cursor.moveToNext()) { 62 Map<String, String> drug = new HashMap<>(); 63 64 int idxId = cursor.getColumnIndex("_id"); 65 i = cursor.getInt(idxId); 66 drug.put("_id", Integer.toString(i)); 67 68 int idxTaker = cursor.getColumnIndex("taker"); 69 drug.put("taker", cursor.getString(idxTaker)); 70 71 int idxName = cursor.getColumnIndex("name"); 72 drug.put("name", cursor.getString(idxName)); 73 74 int idxUnit = cursor.getColumnIndex("unit"); 75 i = cursor.getInt(idxUnit); 76 drug.put("unit", Integer.toString(i)); 77 78 int idxTimes = cursor.getColumnIndex("times"); 79 i = cursor.getInt(idxTimes); 80 drug.put("times", Integer.toString(i)); 81 82 int idxDayOfWeek = cursor.getColumnIndex("dayOfWeek"); 83 drug.put("dayOfWeek", cursor.getString(idxDayOfWeek)); 84 85 int idxDays = cursor.getColumnIndex("days"); 86 i = cursor.getInt(idxDays); 87 drug.put("days", Integer.toString(i)); 88 89 int idxStock = cursor.getColumnIndex("stock"); 90 i = cursor.getInt(idxStock); 91 drug.put("stock", Integer.toString(i)); 92 93 int idxUpdateTime = cursor.getColumnIndex("updateTime"); 94 i = cursor.getInt(idxUpdateTime); 95 drug.put("updateTime", Integer.toString(i)); 96 97 wDrugs.add(drug); 98 } 99 Map<String, String> drug = new HashMap<>(); 100 drug.put("_id", "-1"); 101 drug.put("taker", "1"); 102 drug.put("name", "新規"); 103 drug.put("unit", "0"); 104 drug.put("times", "0"); 105 drug.put("dayOfWeek", ""); 106 drug.put("days", "0"); 107 drug.put("stock", "0"); 108 drug.put("updateTime", "0"); 109 wDrugs.add(drug); 110 111 return wDrugs; 112 113 } 114

回答1件
あなたの回答
tips
プレビュー