본문 바로가기

프로그램언어/android & iPhone

[ 안드로이드 ] SQLite 사용 프로그래밍


1. SQLite 사용하기

안드로이드 프로그램에서 데이터베이스 프로그램을 사용할 수 있습니다. 특히 가장 많이 사용하고 있는 SQLite에 대해

정리하도록 하겠습니다.


2. 프로젝트 생성


안드로이드 프로젝트를 생성합니다.

이제 다음과 같이 데이터베이스를 관리하는 java 소스를 생성하려고 합니다.


이렇게 데이터베이스를 관리하는 자바를 만들게 되면 다음과 같이 파일이 생성이 되는데 물론 에러가 납니다. 그래서 생성자를 생성한 후,

필요한 내용을 채워넣으면 됩니다.

소스를 보시게 되면,

package com.android.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DBManager extends SQLiteOpenHelper {

	public DBManager(Context context) {
		super(context, "School.db", null, 1);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
		// TODO Auto-generated method stub

	}

}

위 내용 소스를 보시게 되면 상속을 받은 super에 대해서 수정을 하게 되면 에러가 나지 않게 됩니다.

위 내용을 수정하게 되는데 잘 보시게 되면 상속받은 super에서 School.db라는 파일을 헨들링 한다고

보시면 됩니다. 그리고 onCreate 테이블의 경우 db에서 테이블이 생성할 때 호출이 되구요, 만약 업데이트를

하게 되는 경우에는 해당 테이블을 삭제 후, 다시 생성하게 되는 것을 뜻하게 됩니다.


package com.android.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DBManager extends SQLiteOpenHelper {

	public DBManager(Context context) {
		super(context, "School.db", null, 1);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase arg0) {
		// TODO Auto-generated method stub
		arg0.execSQL("Create table classRoom ( name text, age integer);");
	}

	@Override
	public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
		// TODO Auto-generated method stub
		arg0.execSQL("drop table classRoom;");
		onCreate(arg0);
	}

}

이렇게 헨들린 한 후, 다시 돌아와서 메인에 해당하는 자바를 수정하여 실제로 헨들린 되어서 사용할 수 있는지 테스트를 하게 됩니다.


package com.android.sqlite;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;

public class SQLite2Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // School.db 라는 데이터베이스 파일이 생성
        SQLiteOpenHelper dbHelper = new DBManager(this);
        SQLiteDatabase db = dbHelper.getWritableDatabase();
                
    }
}

이렇게 실행을 하게 되면 눈에 보이는 것이 없기 때문에 실제로 파일이 생성되었는지 안되어 있는지 확인할 길이 없습니다.

하지만 안드로이드에서는 해당하는 파일을 접근 할 수 있는 방법이 있습니다. android-sdk에서 접근할 수 있는 툴을 제공하고

있습니다. adb.exe라는 프로세서가 동작하고 있습니다 이것이 바로 내부의 콘트롤할 수 있는 도구라고 말할 수 있습니다.

자 그럼 어떻게 하는지 한번 보겠습니다.







데이터베이스가 생성된것을 알 수 있습니다.

이제 안드로이드 폰 또는 시뮬레이션 툴을 이용하여 출력하기 위해서는 다음과 같이 layout을 디자인 해보겠습니다.

관련된 사항은 좀더 찾아 보시면 좋겠습니다.



이렇게 한 후 다음과 같이 자바 파일을 수정하게 되면 헨들링이 가능한 상태가 됩니다.

package com.android.sqlite;

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

public class SQLite2Activity extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
	Button btn1, btn2;
	TextView text;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // 객체를 얻어온다.
        btn1 = (Button)findViewById(R.id.button1);
        btn2 = (Button)findViewById(R.id.button2);
        text = (TextView)findViewById(R.id.textView1);
        
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        
//        // School.db 라는 데이터베이스 파일이 생성
//        SQLiteOpenHelper dbHelper = new DBManager(this);
//        SQLiteDatabase db = dbHelper.getWritableDatabase();
                
    }
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		SQLiteOpenHelper dbHelper = new DBManager(this);
		SQLiteDatabase db = dbHelper.getWritableDatabase();
		if( v == btn1 ) {
//			String sql = "insert into classRoom values('홍길동', 100);";
//			db.execSQL(sql);
			
			// 입력 정보를 가지고 있는 객체를 생성
			ContentValues cv = new ContentValues();
			cv.put("name", "홍길동");
			cv.put("age", 100);
			db.insert("classRoom", null, cv);
			
		} else if ( v == btn2 ) {
			// 데이터 베이스를 오픈한다.
			String sql = "select * from classRoom where age=?;";
			String [] args = {"100"};
			String [] columns = {"name", "age"};
			Cursor result = db.query("classRoom", columns, "age=?", args, null, null, null);
			//Cursor result = db.rawQuery(sql, null);
			//Cursor result = db.rawQuery(sql, args);
			String str = "";
			while( result.moveToNext()) {
				String name = result.getString(0);
				int age = result.getInt(1);
				str += (name + "  " + age + "\n");
			}
			text.setText(str);
		}
		db.close();
	}
}