[Android] SQL Android 2012. 3. 2. 15:40

안드로이드에서 데이터 베이스는 SQLite를 이용한다.

여기에서 SQLiteOpenHelper를 이용하여서 적용시키는데 간단히 코드로 구현을 하면 다음과 같다.

class DBHelper extends SQLiteOpenHelper{
 public DBHelper(Context context){
  super(context,"test.db",null,1);
 }

 @Override
 public void onCreate(SQLiteDatabase db) {
  // TODO Auto-generated method stub
  db.execSQL("CREATE TABLE data(id INTEGER PRIMARY KEY AUTOINCREMENT,"
         + "first TEXT, second TEXT);");
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
  // TODO Auto-generated method stub
  db.execSQL("DROP TABLE IF EXISTS data");
  onCreate(db);
 }
}

다음은 해당하는 내용의 메서드들의 설명이다.

 메서드 내용 
 onCreat DB가 처음 만들어 질 때 호출 되며 테이블 생성 및 초기 레코드 입력 
 onUpgrade DB를 업그레이드 할 경우 호출. 기존 테이블을 삭제하고 새로 생성하거나 ALTER를 이용하여 DB를 수정
 onOpen DB를 열 때 이용
 getReadableDatabase 데이터를 읽기 위해 DB 열기
 getWriteableDatabase 읽고 쓰기 위한 DB 열기
 close DB 닫기


위 내용을 적용하여 CRUD 구문을 구현해보면 다음과 같다.

import android.app.Activity;
import android.app.Service;
import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Button;
import android.widget.TextView;

public class ImageViewActivity extends Activity{
 DBHelper m_dbhelper;
 EditText m_txt;
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  
  m_dbhelper = new DBHelper(this);
  m_txt = (EditText)findViewById(R.id.txt);
  
  findViewById(R.id.insert).setOnClickListener(b_listener);
  findViewById(R.id.delete).setOnClickListener(b_listener);
  findViewById(R.id.update).setOnClickListener(b_listener);
  findViewById(R.id.select).setOnClickListener(b_listener);
 } 

 Button.OnClickListener b_listener = new View.OnClickListener() {
  
  @Override
  public void onClick(View v) {
   // TODO Auto-generated method stub
   SQLiteDatabase db;
   ContentValues row;
   switch(v.getId()){
    case R.id.insert :  
     db = m_dbhelper.getWritableDatabase();
     row = new ContentValues();
     row.put("1", "2");
     row.put("3", "4");
     db.insert("data", null, row);
     db.execSQL("INSERT INTO data VALUES (null,'5','6');");
     db.close();
     m_txt.setText("successed insert");
     break;
    case R.id.delete :  
     db = m_dbhelper.getWritableDatabase();
     row = new ContentValues();
     db.delete("data", null, null);     
     //db.execSQL("DELETE FROM data;");
     db.close();
     m_txt.setText("successed delete");
     break;
    case R.id.update :  
     db = m_dbhelper.getWritableDatabase();
     row = new ContentValues();
     row.put("first", "8");
     db.update("data", row, "first='1'", null); 
     //db.execSQL("UPDATE data SET first = '8' WHERE first = '1';");
     db.close();
     m_txt.setText("successed update");
     break;
    case R.id.select :  
     db = m_dbhelper.getWritableDatabase();
     Cursor cursor;
     //cursor = db.query("data", new String[]{"first","second"},null,null,null,null,null);     
     cursor = db.rawQuery("SELECT first, second FROM data", null);
     String result = "";
     while(cursor.moveToNext()){
      String first = cursor.getString(0);
      String second = cursor.getString(1);
      result+=(first+"="+second+"\n");
     }
     if(result.length()==0){
      m_txt.setText("No Data");
     }
     else{
      m_txt.setText(result);
     }
     cursor.close();
     db.close();
     break;
   }
  }
 };
}