コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

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ともに特徴があるため場合によって使い分けるとよい。