티스토리 뷰

직전 포스팅에 사용했던 예제를 그대로 이어서, 데이터를 조회하는 방법을 확인해보려고 한다.

 

표준 자바에 preparedStatement를 사용하는 것과 비슷한데, SELECT 문을 사용하려면 반드시 Cursor 객체를 사용해야 한다.

 

SQLiteDatabase객체가 가지고 있는 rawQuery() 메서드를 사용하여 Cursor 객체를 참조할 수 있다.

public Cursor rawQuery(String sql, String[] selectionArgs)

 

rawQuery를 한번 실행시켰으면, Cursor 객체가 가지고 있는 moveTo~ 메서드를 사용하여 커서를 이동하여야 다음 select 문을 계속해서 실행 시킬 수 있다.

 

바로 한번 예제를 확인해보자. 예제는 직전 포스팅에서 사용했던 예제를 그대로 사용한다.


◎ActivityMain.java

package com.example.simpledatabase;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    EditText editText;
    EditText editText2;
    TextView textView;

    SQLiteDatabase database;
    DatabaseHelper dbHelper;
    String tableName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editTextText1);
        editText2 = findViewById(R.id.editTextText2);
        textView = findViewById(R.id.textView);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String databaseName = editText.getText().toString();
                createDatabase(databaseName);
            }
        });

        Button button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tableName = editText2.getText().toString();
                insertRecord();
            }
        });

        Button button3 = findViewById(R.id.button3);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                executeQuery();
            }
        });
    }

    private void createDatabase(String name) {
        textView.append("createDatabase 호출됨.");
        /*database = openOrCreateDatabase(name, MODE_PRIVATE, null);*/
        dbHelper = new DatabaseHelper(this);
        database = dbHelper.getWritableDatabase();// SQLiteDatabase 참조
        textView.append("데이터베이스 생성함: " + name);
    }

    private void insertRecord() {
        textView.append("insertRecord 호출됨.");
        if(database == null) {
            textView.append("데이터베이스를 먼저 생성하세요");
            return;
        }

        if(tableName == null) {
            textView.append("테이블을 먼저 생성하세요.");
            return;
        }
        database.execSQL("INSERT INTO " + tableName +
                "(name, age, mobile)" +
                "VALUES " +
                "('John', 20, '010-1111-1111')"
                );
        textView.append("레코드 추가함.");
    }

    public void executeQuery() {
        textView.append("executeQuery 호출");

        // SQL 실행하고 Cursor 객체 반환받기
        Cursor cursor = database.rawQuery("SELECT _id, name, age, mobile FROM emp", null);
        int recordCount = cursor.getCount();
        textView.append("레코드 개수 : " + recordCount);

        for(int i = 0; i < recordCount; i++) {
            //다음 결과 레코드로 넘어가기
            cursor.moveToNext();

            int id = cursor.getInt(0);
            String name = cursor.getString(1);
            int age = cursor.getInt(2);
            String mobile = cursor.getString(3);

            textView.append("레코드#" + i + ": " + id + "," + name + "," + age + "," + mobile);
        }
        cursor.close();
    }
}

 

반응형
Comments