๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
APP/ANDROID

[๋ถ€์ŠคํŠธ์ฝ”์Šค] SQL์„ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™œ์šฉ ์˜ˆ์ œ

by mingzoo 2020. 3. 11.

SQL์ด๋ž€?

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(RDBMS)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํŠน์ˆ˜ ๋ชฉ์ ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํšจ๊ณผ์ ์ธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•˜์—ฌ ๊ตฌ์กฐํ™”๋œ ๋‚ด๋ถ€ SQL Database์ธ SQLite Database๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

- SQLite

์„œ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ผ ์˜คํ”„๋ผ์ธ์—์„œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋„ฃ์–ด ์‚ฌ์šฉํ•˜๋Š” ๋น„๊ต์  ๊ฐ€๋ฒผ์šด ์ž„๋ฒ ๋””๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋งŒ์„ ์‚ฌ์šฉํ•จ

์˜คํ”ˆ์†Œ์Šค๋กœ ๋งŒ๋“ค์–ด์ง„ ํŒŒ์ผ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

- MySQL

์„œ๋ฒ„ ํด๋ผ์ด์–ธํŠธ ๋ฐฉ์‹์˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค

 

//MainActivity.java
package com.example.mydatabase;

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;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

    EditText editText;

    TextView textView;

    SQLiteDatabase database;

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

        editText = (EditText) findViewById(R.id.editText);

        textView = (TextView) findViewById(R.id.textView);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String databaseName = editText.getText().toString(); //์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ ์˜ด
                openDatabase(databaseName);
            }
        });
    }
    public void openDatabase(String databaseName) {
        println("openDatabase() ํ˜ธ์ถœ๋จ");
        database = openOrCreateDatabase(databaseName, MODE_PRIVATE, null); //๋ณด์•ˆ์ƒ MODE_PRIVATE์‚ฌ์šฉ
        if(database != null){
            println("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜คํ”ˆ๋จ");
        }
    }

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

<์ฝ”๋“œ ๋ถ€์—ฐ์„ค๋ช…>

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ €์žฅ์†Œ์ด๋ฉฐ ์•ฑ์—์„œ๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ง„๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋‘๋ฉด ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์˜คํ”ˆํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์—ด๊ณ  ์‹ถ๋‹ค๋ฉด openOrCreateDatabase ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

@Override
//์•„๋ž˜์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉ
            public void onClick(View v) {
                String databaseName = editText.getText().toString(); //์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ ์˜ด
                openDatabase(databaseName);
            }
        });
    }
    
    //๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ฆ
    public void openDatabase(String databaseName) {
        println("openDatabase() ํ˜ธ์ถœ๋จ");
        database = openOrCreateDatabase(databaseName, MODE_PRIVATE, null); //๋ณด์•ˆ์ƒ MODE_PRIVATE์‚ฌ์šฉ
        if(database != null){
            println("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜คํ”ˆ๋จ");
        }
    }

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ด์šฉํ•œ ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ

์œ„์˜ ์ฝ”๋“œ์— ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„

        Button button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String tableName = editText2.getText().toString(); //์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ ์˜ด
                createTable(tableName);
            }
        });
    }
    
    public void createTable(String tableName){
        println("createTable() ํ˜ธ์ถœ๋จ");    //ํ•จ์ˆ˜๊ฐ€ ์ œ๋Œ€๋กœ ์“ฐ์—ฌ์ง€๋Š”์ง€ ํ™•์ธ

        if(database != null){
            String sql = "create table " + tableName + "(_id integer PRIMARY KEY autoincrement, name text, age integer, mobile text)";
            //column์— ๋“ค์–ด๊ฐˆ ๋‚ด์šฉ ์„ค์ •
            //๋„์–ด์“ฐ๊ธฐ ๊ผญํ•ด์ฃผ๊ธฐ! ์˜ค๋ฅ˜์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ๋“ฌ
            database.execSQL(sql); //๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์ง€ ์•Š์•„๋„๋˜๋Š” SQL๋ฌธ์ด ์žˆ์œผ๋ฉด ์‚ฌ์šฉ๊ฐ€๋Šฅ
            println("ํ…Œ์ด๋ธ” ์ƒ์„ฑ๋จ");
        }else{
            println("๋จผ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์˜คํ”ˆํ•˜์„ธ์š”");
            //๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
        }
    }

๋ฒ„ํŠผํ•˜๋‚˜๋ฅผ ๋” ๋งŒ๋“ค์–ด์„œ ๋ˆ„๋ฅด๋ฉด ๋ฒ„ํŠผ1์„ ๋ˆ„๋ฅด๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๊ฐ€ ์˜คํ”ˆ์ด ๋˜๊ณ , ๋ฒ„ํŠผ2๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ฒŒ ํ•˜์˜€๋‹ค.

๋‚˜๋Š” ์ด์— ์˜ค๋ฅ˜๊ฐ€ ํ•˜๋‚˜๋ฐœ์ƒํ–ˆ๋Š”๋ฐ ๋ฒ„ํŠผ1์„ ๋ˆŒ๋ €์„๋•Œ, "createTable()ํ˜ธ์ถœ๋จ" ๊ณผ ํ•จ๊ป˜ "๋จผ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์˜คํ”ˆํ•˜์„ธ์š”"๊ฐ€ ํ™”๋ฉด์— ๋–ด์—ˆ๋‹ค. ์ด๋Š” button2.setOnClickListener ์ด๋ ‡๊ฒŒ ์ž‘์„ฑ๋˜์–ด์•ผํ•  ๋ถ€๋ถ„์ด button.setOnClickListner๋กœ ์ž‘์„ฑ๋˜์–ด ๋ฒ„ํŠผ1์„ ๋ˆŒ๋ €์„๋•Œ, ๋ฒ„ํŠผ2์˜ ๋™์ž‘์˜ ์‹คํ–‰๋˜์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

์ด ์˜ˆ์ œ์—์„œ ์ค‘์š”ํ•œ ์ ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๊ฐ€ ์˜คํ”ˆ์ด ๋ผ์•ผ ๋‹ค์Œ์— SQL๋ฌธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

728x90