Android - 데이터베이스와 테이블 만들기

유의선·2023년 9월 12일
0

데이터베이스를 만드는 가장 간단한 방법은 Context 클래스에 정의된 openOrCreateDatabase 메소드를 사용하는 것이다. Context 클래스에는 이렇게 만든 데이터베이스를 삭제할 수 있는 메소드 deleteDatabase도 정의되어 있다.

public abstract SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory)
public abstract boolean deleteDatabase(String name)

첫 번째 파라미터데이터베이스의 이름이다.
이름은 데이터베이스를 구분하며 데이터베이스 파일의 이름으로도 사용된다.

두 번째 파라미터사용 모드이다.
여기에는 MODE_PRIVATE 상수를 넣어준다.

세 번째 파라미터는 Null이 아닌 객체를 지정할 경우 쿼리의 값으로 반환되는 데이터를 참조하는 커서를 만들어 낼 수 있는 객체가 전달된다.

openOrCreateDatabase 메소드를 호출했을 때 반환되는 SQLiteDatabase 객체는 name 변수로 지정한 데이터베이스에 접근할 수 있는 메소드를 정의하고 있다.
그래서 이 메소드로 데이터베이스를 열거나 만든 후에는 SQLiteDatabase 객체를 참조해야 한다.

SQLiteDatabase 객체에서 가장 중요한 메소드 중 하나는 execSQL이다.
execSQL 메소드는 데이터베이스를 만들고 난 다음 SQL문을 실행할 때 사용된다.


데이터베이스와 테이블 생성 후 레코드 추가하기

레이아웃에 데이터베이스의 이름을 입력하는 editText와 데이터베이스를 만드는 button,
테이블의 이름을 입력하는 editText와 테이블을 만드는 button,
마지막으로 진행 상태를 표시해주는 TextView를 ScrollView안에 담았다.


MainActivity.java에 다음과 같은 코드를 작성했다.

package org.techtown.database;

import androidx.appcompat.app.AppCompatActivity;

import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

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

    SQLiteDatabase database;
    String tableName;

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

        editText = findViewById(R.id.editText);
        editText2 = findViewById(R.id.editText2);
        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();
                createTable(tableName);

                insertRecord();
            }
        });
    }

    private void createDatabase(String name){
        println("createDatabase 호출됨.");

        database = openOrCreateDatabase(name, MODE_PRIVATE, null);

        println("데이터베이스 생성함 : " + name);
    }

    private void createTable(String name){
        println("createTable 호출됨.");

        if(database == null){
            println("데이터베이스를 먼저 생성하세요.");
            return;
        }

        database.execSQL("create table if not exists " + name +
                "(" + " _id integer PRIMARY KEY autoincrement, " +
                " name text, " +
                " age integer, " +
                " mobile text)");

        println("테이블 생성함 : " + name);
    }

    private void insertRecord(){
        println("insertRecord 호출됨.");

        if(database == null){
            println("데이터베이스를 먼저 생성하세요.");
            return;
        }

        if(tableName == null){
            println("테이블을 먼저 생성하세요.");
            return;
        }

        database.execSQL("insert into " + tableName +
                "(name, age, mobile) " +
                " values " +
                "('John', 20, '010-1000-1000')");

        println("레코드 추가함.");
    }

    public void println(String data){
        textView.append(data + '\n');
    }
}

우선 데이터베이스 만들기 버튼을 누르면 정의한 createDatabase 메소드를 호출해 데이터베이스를 만들도록 하였다.

    private void createDatabase(String name){
        println("createDatabase 호출됨.");

        database = openOrCreateDatabase(name, MODE_PRIVATE, null);

        println("데이터베이스 생성함 : " + name);
    }

editText에서 데이터베이스 이름을 전달받아 openOrCreateDatabase 메소드를 호출한다.


테이블 만들기 버튼을 누르면 정의한 creatTable 메소드를 호출해 테이블을 만들고 정의한 insertRecord 메소드를 호출하여 임의의 레코드를 삽입한다.

    private void createTable(String name){
        println("createTable 호출됨.");

        if(database == null){
            println("데이터베이스를 먼저 생성하세요.");
            return;
        }

        database.execSQL("create table if not exists " + name +
                "(" + " _id integer PRIMARY KEY autoincrement, " +
                " name text, " +
                " age integer, " +
                " mobile text)");

        println("테이블 생성함 : " + name);
    }

createTable 메소드에선 execSQL 메소드로 SQL문을 파라미터로 전달받아 테이블을 생성한다.
여기서는 직원 테이블을 위해 직원id, 이름, 나이, 휴대폰 번호로 정의하였다.

직원 아이디는 자동으로 1씩 증가하는 키 값(PRIMARY KEY autoincrement)으로 정의하였다.

 private void insertRecord(){
        println("insertRecord 호출됨.");

        if(database == null){
            println("데이터베이스를 먼저 생성하세요.");
            return;
        }

        if(tableName == null){
            println("테이블을 먼저 생성하세요.");
            return;
        }

        database.execSQL("insert info " + tableName +
                "(name, age, mobile) " +
                " values" +
                "('John', 20, '010-1000-1000')");

        println("레코드 추가함.");
    }

insertRecord 메소드에선 execSQL 메소드로 SQL문을 파라미터로 전달받아 임의의 레코드를 만들어 추가하였다.
여기서는 'John', 20, '010-1000-1000' 을 추가하였다.


0개의 댓글