Androidアプリ入門 No.71 SQLiteの使用 queryをもう少し
SQLiteの使用
queryをもう少し
ここではqueryをもう少し深く見ていく。DbTest.javaをrawQueryからqueryに書き変える。
package sample.dt; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class DbTest extends Activity { private EditText searchEditText; private Button readButton; private TextView resultTextView; private DatabaseHelper databaseHelper; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // DB作成 databaseHelper = new DatabaseHelper(getApplicationContext()); searchEditText = (EditText) findViewById(R.id.searchEditText); readButton = (Button) findViewById(R.id.readButton); readButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { read(); } }); resultTextView = (TextView) findViewById(R.id.resultTextView); } private void read() { String search = searchEditText.getText().toString(); if (search.equals("")) { Toast.makeText(getApplicationContext(), "検索条件を入力してください。", Toast.LENGTH_SHORT).show(); return; } SQLiteDatabase db = databaseHelper.getReadableDatabase(); Cursor cursor = db.query("emp", new String[] { "name", "age" }, "name LIKE '%' || ? || '%'", new String[] { search }, null, null, "age DESC"); cursor.moveToFirst(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < cursor.getCount(); i++) { sb.append(cursor.getString(0)).append(","); sb.append(cursor.getInt(1)).append("\n"); cursor.moveToNext(); } cursor.close(); resultTextView.setText(sb.toString()); } }
SQLiteDatabase#queryメソッドでは、「WHERE」や、「ORDER BY」などが先述の通り、それぞれの引数に対応している。そのため、「WHERE」や「ORDER BY」などを書かなくてよい。上記のソースでqueryメソッドは以下のように使用している。
Cursor cursor = db.query("emp", new String[] { "name", "age" }, "name LIKE '%' || ? || '%'", new String[] { search }, null, null, "age DESC");
WHERE句では置き換え文字列が使用でき、rawQueryメソッドと同じことが実現できる。実行結果も先の例と変わらない。query、rawQueryともに特徴があるため場合によって使い分けるとよい。