안드로이드 SQLite
1. 프로젝트 생성
- File → New → Android Project → DBBasic
1.1 엑티비티 구성 기본 파일
| 엑티비티 | 엑티비티 자바 클래스 | DB 연결 | 레이아웃 | 리소스파일 |
|---|
| 고객목록 | CustomerListActivity.java | DBManager.java | activity_customer_list.xml | strings.xml |
| 고객등록 | CustomerJoinActivity.java | DBManager.java | activity_customer_join.xml | strings.xml |
1.2 strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">고객관리</string>
<string name="b_join">등록</string>
<string name="b_list">목록</string>
<string name="act_join_form">고객등록</string>
<string name="menu_settings">Settings</string>
<!-- 등록폼에 사용되는 라벨 -->
<string name="name">성명</string>
<string name="gender">성별</string>
<string name="receive">수신여부</string>
</resources>
2. DB 연결
- DB 연결 기능을 담당하는 DBManager.java 생성
- DBManager 클래스는 SQLiteOpenHelper 클래스로부터 테이터베이스와 테이블을 관리하는 메소드를 상속받는다.
package com.example.dbbasic;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBManager extends SQLiteOpenHelper {
public DBManager(Context context){
//DB를 생성 (이미 생성된 경우 생성되지 않음)
super(context, "myDB", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//테이블 생성 (이미 생성된 경우 생성되지 않음)
db.execSQL("create table customers (name text, gender text, sms text);");
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
//존재하는 DB와 버전이 다른 경우
}
}
3. 고객 등록
3.1 고객 등록 layout
- activity_customer_join.xml
- 성명, 성별, 수신여부등의 등록 폼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<!-- 성명 입력을 위한 폼 구성요소 시작 -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="60sp"
android:layout_height="wrap_content"
android:text="@string/name" />
<EditText
android:id="@+id/edit_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<!-- 성별 선택 영역 -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="60sp"
android:layout_height="wrap_content"
android:text="@string/gender"/>
<RadioGroup
android:id="@+id/radiogroup_gender"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio_male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="남" />
<RadioButton
android:id="@+id/radio_female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="여" />
</RadioGroup>
</LinearLayout>
<!-- 수신여부 선택 영역 -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="60sp"
android:layout_height="wrap_content"
android:text="@string/receive" />
<CheckBox
android:id="@+id/check_sms"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SMS"/>
</LinearLayout>
<!-- 버튼 -->
<LinearLayout
android:orientation="horizontal"
android:gravity="right"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<!-- 등록버튼 -->
<Button
android:id="@+id/button_join"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/b_join" />
<!-- 목록버튼 -->
<Button
android:id="@+id/button_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/b_list" />
</LinearLayout>
</LinearLayout>
3.2 고객 등록 Activity
- 회원정보 등록을 처리하는 CustomerJoinActivity.java 생성
package com.example.dbbasic;
import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioGroup;
public class CustomerJoinActivity extends Activity implements OnClickListener {
private DBManager dbMgr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_customer_join);
setTitle("고객등록");
// 등록버튼 onClick() 메소드 실행
Button btnJoin = (Button) findViewById(R.id.button_join);
btnJoin.setOnClickListener(this);
// 목록버튼 onClick() 메소드 실행
Button btnList = (Button) findViewById(R.id.button_list);
btnList.setOnClickListener(this);
}
@Override
public void onClick(View view) {
// 목록 버튼을 클릭한 경우
if (view.getId() == R.id.button_list) {
Intent intent = new Intent(this, CustomerListActivity.class);
// 인텐트에서 지정한 엑티비티 실행
startActivity(intent);
// 현재 엑티비티 종료
finish();
}
// 성명 추출
EditText edName = (EditText) findViewById(R.id.edit_name);
String strName = edName.getText().toString();
// 성별 추출
RadioGroup rgGender = (RadioGroup) findViewById(R.id.radiogroup_gender);
String strGender = "남";
if (rgGender.getCheckedRadioButtonId() == R.id.radio_female) {
strGender = "여";
}
// SMS 수신여부
CheckBox chkSms = (CheckBox) findViewById(R.id.check_sms);
String strSms = "N";
if (chkSms.isChecked()) {
strSms = (String) chkSms.getText();
}
dbMgr = new DBManager(this);
try {
SQLiteDatabase sdb = dbMgr.getWritableDatabase();
StringBuffer sql = new StringBuffer();
sql.append("INSERT INTO customers VALUES(");
sql.append("'" + strName + "',");
sql.append("'" + strGender + "',");
sql.append("'" + strSms + "');");
sdb.execSQL(sql.toString());
} catch (SQLiteException e) {
} finally {
dbMgr.close();
}
Intent intent = new Intent(this, CustomerListActivity.class);
// 인텐트에서 지정한 엑티비티 실행
startActivity(intent);
// 현재 엑티비티 종료
finish();
}
}
4. 고객목록
4.1 고객 목록 layout
- activity_customer_list.xml
- 조회영역과 등록버튼으로 구성됨
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:id="@+id/customers"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</LinearLayout>
<Button
android:id="@+id/button_join_form"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/b_join" />
</LinearLayout>
4.2 고객 목록 Activity
- 고객정보를 조회하는 CustomerListActivity.java 생성
package com.example.dbbasic;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
public class CustomerListActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_customer_list);
// 엑티비티 라벨 출력
setTitle("고객목록");
// 고객정보를 추가할 레이아웃을 인식
LinearLayout layout = (LinearLayout) findViewById(R.id.customers);
int i = 0;
try {
DBManager dbMgr = new DBManager(this);
// DB 연결
SQLiteDatabase db = dbMgr.getReadableDatabase();
Cursor cursor = db.rawQuery(
"SELECT name, gender, sms FROM customers", null);
while (cursor.moveToNext()) {
String name = cursor.getString(0);
String gender = cursor.getString(1);
String sms = cursor.getString(2);
// 레이아웃에 추가할 고객정보를 위한 텍스트뷰 생성
TextView nameTextView = new TextView(this);
nameTextView.append(name);
nameTextView.setTextSize(20);
nameTextView.setTextColor(Color.rgb(255, 255, 0));
// 고객성명을 레이아웃에 추가하여 출력
layout.addView(nameTextView);
// 성별과 SMS 수신여부를 위한 텍스트 뷰
TextView gsTextView = new TextView(this);
gsTextView.append(gender + "\n");
gsTextView.append(sms + "\n");
// 고객정보를 레이아웃에 추가하여 출력
layout.addView(gsTextView);
i++;
}
if (i == 0) {
TextView defaultTextView = new TextView(this);
defaultTextView.append("등록된 고객이 없습니다.!");
layout.addView(defaultTextView);
}
// 리소스 반환
cursor.close();
dbMgr.close();
} catch (SQLiteException e) {
TextView errorTextView = new TextView(this);
errorTextView.append("db 접속 에러가 발생했습니다!");
layout.addView(errorTextView);
}
Button btn = (Button) findViewById(R.id.button_join_form);
// 등록버튼 클릭대기
btn.setOnClickListener(this);
}
/**
* 등록을 위해 CustomerRegActivity.class 먼저 구현한다.
*/
@Override
public void onClick(View v) {
// 등록 버튼이 클릭되었을 때
Intent it = new Intent(this, CustomerJoinActivity.class);
startActivity(it);
finish();
}
}
5. AndroidManifest.xml 편집
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dbbasic"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.dbbasic.CustomerListActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.dbbasic.CustomerJoinActivity"
android:label="@string/act_join_form" >
</activity>
</application>
</manifest>