본문 바로가기

아옳옳의 코딩공부/아옳옳의 안드로이드스튜디오

2021-06-03안드로이드 스튜디오 (SQLite 사용하기)

반응형

내가 공부한 MySQL은 서버쪽에서 다루는 DB이다. 서버 컴퓨터가 포맷되거나 초기화 혹은 DB를 삭제 하지 않는 한 영구적으로 남아 있다 . 하지만 안드로이드 스튜디오에서 사용할 수 있는 SQLITE는 로컬 DB라고 해서, 서버가 필요없이 클라이언트 안에 내장으로 들어가 있는 DB를 말한다. 

기존 DB와 다른점은 앱이 삭제되면 해당 DB도 삭제되는것 외에는 별다른 차이가 없어서 많이 사용한다.  

그렇다고 다른 DB를 사용 못하는 것도 아니라 사용이 가능하다!

 

SQLITE사용 해보기 ( 아래에 실습한 것들 있음 같이 참조 하면 이해하자) 

@ 데이터 베이스를 열거나 삭제할 수 있는 메소드 

# public abstract SQLiteDataBase openOrCreateDatabase ( 디비 이름 , 모드설정 , 다른곳에서 만든것 사용할때 설정하는것 보통 잘 사용안해서 null 적어주면 된다 ) 

 

# public abstract boolean deleteDatabase (삭제할 데이터 베이스 )

 

실제 사용 방법 

SQLiteDataBase db;

db = openOrCreateDatabase( name  , MODE_PRIVATE, null);

이렇게 해주면 db가 생성된다 .

 

@SQL을 실행할 수 있는 메소드 

# CREATE, INSERT, DELETE 등 결과데이터가 없는 SQL문

public void execSQL(String sql문) throws SQLException

 

실제 사용 

# 테이블 생성 하는 방법 

db.execSQL("CREATE TABLE IF NOT EXISTS "+name+"(_id integer PRIMARY KEY AUTOINCREMENT,"
+" name text, age int , phone text)")

 

# 생성 하는 법 (2가지 방법이 있다) 

1번 방법 : db.execSQL("INSERT INTO "+name+"(name, age, phone) VAlUES('정연',26,'010-1000-1000')");

 

2번 방법 : ContentValues recordValue = new ContentValues();
              recordValue.put("name","다연");
              recordValue.put("age",24);
              recordValue.put("phone","010-4000-4000");
              db.insert(table_name,null,recordValue);

 

# 수정 하는 법 ( 2가지 방법이 있다 ) 

 

1번 방법 : db.execSQL("UPDATE "+table_name+" SET age=age+1 WHERE name = '다연'");

 

2번 방법 : ContentValues recordValue = new ContentValues()

              recordValue.put("age", 25); // (칼럼 , 값 ) 
              String[] args = {"다연"};      //조건 값 꼭 배열로 해야함 
              db.update(table_name, recordValue,"name=?",args);

              // ( 테이블 이름 , 수정할 값 , 조건식 (?에 조건값이 들어간다 )  , 조건값 ) 

# 삭제 하는 법

 

글로만 보면 뭐가 뭔지 헷갈릴 것이다 . 실제로 어떻게 작동하는지 확인 보도록 하자 !

실제 실습 내용 

public class MainActivity extends AppCompatActivity {

    EditText db_name , tb_name;
    TextView status;
    String database_name, table_name;
    SQLiteDatabase db;

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


        db_name = findViewById(R.id.edtDbName);
        tb_name = findViewById(R.id.edtTbName);
        status = findViewById(R.id.status);
        Button database_Btn = findViewById(R.id.createDb);
        Button table_Btn = findViewById(R.id.createTb);

        // 데이터 베이스 생성 버튼 
        database_Btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //데이터베이스 이름 사용자에게 받아오기 
                database_name = db_name.getText().toString();
                //메소드 호출 (이 메소드로 생성됨 ) 
                createDatabase(database_name);
            }
        });
        // 테이블 생성 버튼 
        table_Btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //테이블 이름 사용자에게 받아오기 
                table_name = tb_name.getText().toString();
                // 메소드 호출 ( 이 메소드로 생성됨) 
                createTable(table_name);
            }
        });
    }

    // 데이터 베이스 생성 메소드 
    public void  createDatabase(String name){
        if(name.isEmpty()){
            println("데이터베이스 이름을 먼저 입력해주세요");
        }else {
            // 데이터 베이스 생성 하기
            // openOrCreateDatabase(데이터베이스 이름, 데이터베이스 모드 (쉐어드 프리퍼런스에서 했던 모드 ) ,
            // 알려 하지말고 null 적어라) 메소드로 만듬
            db = openOrCreateDatabase(name,MODE_PRIVATE, null);
            //단순한 텍스트를 화면에 보여주기위한 메소드 
            println("[ "+ name +"] 데이터베이스 생성이 완료 되었습니다.");
        }
    }
    //테이블 생성 메소드 
    public void createTable(String name){
        if(db==null){
            println("데이터베이스 먼저 생성하세요");
            return;
        }else {
            if(name.isEmpty()){
                println("테이블 이름을 먼저 입력해주세요");
            }else {
                //데이터 같은 이름의 기존 테이블 있다면 삭제하고 만들어라 
                db.execSQL("DROP TABLE IF EXISTS "+ name);
                //테이블 생성 
                db.execSQL("CREATE TABLE IF NOT EXISTS "+name+"(_id integer PRIMARY KEY AUTOINCREMENT,"
                        +" name text, age int , phone text)");
                if(table_Creat ==false) {
                    //단순한 텍스트를 화면에 보여주기위한 메소드 
                    println("[ " + name + "] 테이블 생성이 완료 되었습니다.");
                    //데이터 입력 메소드 호출 
                    insertRecord(table_name);
                }table_Creat = true;
            }
        }
    }
    // 데이터 입력 메소드 
    public void insertRecord(String name){
        db.execSQL("INSERT INTO "+name+"(name, age, phone) VAlUES('정연',26,'010-1000-1000')");
        db.execSQL("INSERT INTO "+name+"(name, age, phone) VAlUES('모모',26,'010-2000-2000')");
        db.execSQL("INSERT INTO "+name+"(name, age, phone) VAlUES('채영',23,'010-3000-3000')");
        //단순한 텍스트를 화면에 보여주기위한 메소드 
        println(name+ "테이블에 3개의 레코드를 입력했습니다.");
    }
    
    // 추가 버튼
    public void insert_Click(View view) {
        ContentValues recordValue = new ContentValues();
        recordValue.put("name","다연");
        recordValue.put("age",24);
        recordValue.put("phone","010-4000-4000");
        db.insert(table_name,null,recordValue);
        println("[ "+ table_name +"] 테이블에 1개의 레코드 입력되었습니다.");
    }
    // 수정버튼 
    public void update_Click(View view) {
        db.execSQL("UPDATE "+table_name+" SET age=age+1 WHERE name = '다연'");
        ContentValues recordValue = new ContentValues();
        recordValue.put("age", 25);
        String[] args = {"다연"};
        db.update(table_name, recordValue,"name=?",args);

        println( table_name +" 테이블에 1개의 레코드를 수정하였습니다.");
    }
    // 삭제 버튼 
    public void delete_Click(View view) {
        db.execSQL("");
    }

    // 텍스트뷰에 글 찍어주기 위한 메소드 
    public void println(String msg){
        status.append("\n" + msg);
    }
}

출력 화면 

반응형