src/ kr.android.sqlite / SQListDemo
package kr.android.sqlite;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DatabaseAdapter {
/*=-=-=-=-=-=-=-=-상수 정의 시작=-=-=-=-=-=-=-=-*/
//Log 처리를 위한 TAG지정
static final String TAG = "DatabaseHandler";
//데이터 베이스 파일이름
static final String DB_NAME ="daily_memo.db";
//테이블 이름
static final String TABLE_NAME="daily_memo";
//데이터베이스 각열의 이름
static final String MEMO_ID="_id";
static final String MEMO_CONTENT="content";
//컬럼 인덱스
static final int ID_INDEX= 0;
static final int CONTENT_INDEX =1;
//컬럼 명세
static final String[] PROJECTION = new String[] {MEMO_ID,MEMO_CONTENT};
//테이블 생성 SQL
static final String CREATE_TABLE ="CREATE table "+TABLE_NAME+" ("+MEMO_ID+" " +
"integer primary key autoincrement, "+MEMO_CONTENT+" text not null);";
//테이블 삭제 SQL
static final String DROP_TABLE = "DROP TABLE IF EXISTS "+TABLE_NAME+";";
/*=-=-=-=-=-=-=-=-상수 정의 끝=-=-=-=-=-=-=-=-*/
//데이터 베이스 연동 객체
private SQLiteDatabase db;
//데이터 베이스를 이용하는 어플리케이션의 컨텍스트
private Context context;
public DatabaseAdapter(Context context){
this.context=context;
}
//SQLiteDatabase 생성
public void open() throws SQLException{
try{
db =(new DatabaseHelper(context)).getWritableDatabase();
}catch(SQLiteException e){
db =(new DatabaseHelper(context)).getReadableDatabase();
}
}
//SQLiteDatabase 자원정리
public void Close(){
db.close();
}
//전체 행을 ID의 내림차순으로 호출
public Cursor fetchAllMemo(){
return db.query(TABLE_NAME, //테이블명
PROJECTION, //컬럼명세
null, //where 절
null, //where 절에 전달될 데이터
null, //group by
null, //having
MEMO_ID + " DESC " //order by
);
}
//업데이트
public void setMemo(String id, String content){
//업데이트 값 설정
ContentValues values = new ContentValues();
//데이터 등록(컬럼명 , 수정할 데이터)
values.put(MEMO_CONTENT, content);
//행을 업데이트
db.update(TABLE_NAME, //테이블 명
values, //수정할 데이터
MEMO_ID + " = ?", //where절
new String[]{ id } //where절 ?에 전달될 primary key
);
}
//검색
public String searchMemo(String str){
//읽을 데이터의 조건
String where = MEMO_CONTENT+" like ?";
//where의 ?을 대체할 매개 변수
String param = str.substring(0,1) + "%";
//검색
Cursor c = db.query(
TABLE_NAME,
PROJECTION,
where, //WHERE
new String[] { param }, //LIKE
null, //GROUP BY
null, //HAVING
MEMO_ID+ " DESC", //ORDERED BY 새로운 정렬
"10"); //LIMIT 최대 10개
StringBuffer buff = new StringBuffer();
if(c.moveToFirst()){
//검색 결과를 차례로 꺼내 문자열에 추가
do{
long id = c. getLong(ID_INDEX);
buff.append("id(").append(id).append(") ");
String memo = c.getString(CONTENT_INDEX);
buff.append(memo).append("\n");
}while(c.moveToNext());
}
c.close();
return buff.toString();
}
//데이터를 추가하고 추가된 데이터의 primary key(_id)반환
public String addMemo(String content){
ContentValues values = new ContentValues();
values.put(MEMO_CONTENT, content);
long id =db.insert(TABLE_NAME, MEMO_CONTENT, values);
if(id < 0){
return "";
}
return Long.toString(id);
}
//지정된 ID의 행삭제
public void deleteMemo(String id){
db.delete(TABLE_NAME, //테이블명
MEMO_ID + " = ?", //where절
new String[] { id } //where절 ? 에 전달될 데이터
);
}
/*=-=-=--=-=-=-=-=-=SQLiteOPenHelper를 상속받아 구현한 클래스=-=-=-=-=-=-=-=-*/
public class DatabaseHelper extends SQLiteOpenHelper{
public DatabaseHelper(Context context){
super(context, DB_NAME, null, 1);
}
//데이터 베이스를 새로 만든 다음 호출
public void onCreate(SQLiteDatabase db){
//내부에 테이블 만들기
db.execSQL(CREATE_TABLE);
}
//존재하는 데이터 베이스로 정의하고 있는 버전이 다를때 super(context, DB_NAME, null, 1); -> 2
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
Log.w(TAG,"Version mismatch : "+oldVersion+" to "+newVersion);
//여기에서는 테이블을 삭제하고 새로 작성함
//일반적으로 테이블의 데이터 변환을 수행
db.execSQL(DROP_TABLE);
onCreate(db);
}
}
}
src/ kr.android.sqlite / DatabaseAdapter
package kr.android.sqlite;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DatabaseAdapter {
/*=-=-=-=-=-=-=-=-상수 정의 시작=-=-=-=-=-=-=-=-*/
//Log 처리를 위한 TAG지정
static final String TAG = "DatabaseHandler";
//데이터 베이스 파일이름
static final String DB_NAME ="daily_memo.db";
//테이블 이름
static final String TABLE_NAME="daily_memo";
//데이터베이스 각열의 이름
static final String MEMO_ID="_id";
static final String MEMO_CONTENT="content";
//컬럼 인덱스
static final int ID_INDEX= 0;
static final int CONTENT_INDEX =1;
//컬럼 명세
static final String[] PROJECTION = new String[] {MEMO_ID,MEMO_CONTENT};
//테이블 생성 SQL
static final String CREATE_TABLE ="CREATE table "+TABLE_NAME+" ("+MEMO_ID+" " +
"integer primary key autoincrement, "+MEMO_CONTENT+" text not null);";
//테이블 삭제 SQL
static final String DROP_TABLE = "DROP TABLE IF EXISTS "+TABLE_NAME+";";
/*=-=-=-=-=-=-=-=-상수 정의 끝=-=-=-=-=-=-=-=-*/
//데이터 베이스 연동 객체
private SQLiteDatabase db;
//데이터 베이스를 이용하는 어플리케이션의 컨텍스트
private Context context;
public DatabaseAdapter(Context context){
this.context=context;
}
//SQLiteDatabase 생성
public void open() throws SQLException{
try{
db =(new DatabaseHelper(context)).getWritableDatabase();
}catch(SQLiteException e){
db =(new DatabaseHelper(context)).getReadableDatabase();
}
}
//SQLiteDatabase 자원정리
public void Close(){
db.close();
}
//전체 행을 ID의 내림차순으로 호출
public Cursor fetchAllMemo(){
return db.query(TABLE_NAME, //테이블명
PROJECTION, //컬럼명세
null, //where 절
null, //where 절에 전달될 데이터
null, //group by
null, //having
MEMO_ID + " DESC " //order by
);
}
//업데이트
public void setMemo(String id, String content){
//업데이트 값 설정
ContentValues values = new ContentValues();
//데이터 등록(컬럼명 , 수정할 데이터)
values.put(MEMO_CONTENT, content);
//행을 업데이트
db.update(TABLE_NAME, //테이블 명
values, //수정할 데이터
MEMO_ID + " = ?", //where절
new String[]{ id } //where절 ?에 전달될 primary key
);
}
//검색
public String searchMemo(String str){
//읽을 데이터의 조건
String where = MEMO_CONTENT+" like ?";
//where의 ?을 대체할 매개 변수
String param = str.substring(0,1) + "%";
//검색
Cursor c = db.query(
TABLE_NAME,
PROJECTION,
where, //WHERE
new String[] { param }, //LIKE
null, //GROUP BY
null, //HAVING
MEMO_ID+ " DESC", //ORDERED BY 새로운 정렬
"10"); //LIMIT 최대 10개
StringBuffer buff = new StringBuffer();
if(c.moveToFirst()){
//검색 결과를 차례로 꺼내 문자열에 추가
do{
long id = c. getLong(ID_INDEX);
buff.append("id(").append(id).append(") ");
String memo = c.getString(CONTENT_INDEX);
buff.append(memo).append("\n");
}while(c.moveToNext());
}
c.close();
return buff.toString();
}
//데이터를 추가하고 추가된 데이터의 primary key(_id)반환
public String addMemo(String content){
ContentValues values = new ContentValues();
values.put(MEMO_CONTENT, content);
long id =db.insert(TABLE_NAME, MEMO_CONTENT, values);
if(id < 0){
return "";
}
return Long.toString(id);
}
//지정된 ID의 행삭제
public void deleteMemo(String id){
db.delete(TABLE_NAME, //테이블명
MEMO_ID + " = ?", //where절
new String[] { id } //where절 ? 에 전달될 데이터
);
}
/*=-=-=--=-=-=-=-=-=SQLiteOPenHelper를 상속받아 구현한 클래스=-=-=-=-=-=-=-=-*/
public class DatabaseHelper extends SQLiteOpenHelper{
public DatabaseHelper(Context context){
super(context, DB_NAME, null, 1);
}
//데이터 베이스를 새로 만든 다음 호출
public void onCreate(SQLiteDatabase db){
//내부에 테이블 만들기
db.execSQL(CREATE_TABLE);
}
//존재하는 데이터 베이스로 정의하고 있는 버전이 다를때 super(context, DB_NAME, null, 1); -> 2
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
Log.w(TAG,"Version mismatch : "+oldVersion+" to "+newVersion);
//여기에서는 테이블을 삭제하고 새로 작성함
//일반적으로 테이블의 데이터 변환을 수행
db.execSQL(DROP_TABLE);
onCreate(db);
}
}
}
res / values/string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, SQLiteDemo!</string>
<!-- 응용 프로그램 이름 -->
<string name="app_name">SQLiteDemo</string>
<!-- 등록된 메모가없는 경우에 대한 설명 -->
<string name="no_memo">메모가없습니다</string>
<!-- 버튼의 표시 문자열 -->
<string name="delete_label">삭제</string>
<string name="modify_label">변경</string>
<string name="add_label">추가</string>
<!-- ID 편집 텍스트 상자에 표시되는 팁 -->
<string name="id_label">ID</string>
</resources>
res/ layout/ main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<!-- ID 문자열 표시(수정/삭제시 해당 primary key 표시) -->
<TextView
android:id="@+id/view_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/id_label"
android:width="50dp" />
<!-- 데이터 입력 (등록/수정/삭제) -->
<EditText
android:id="@+id/edit_memo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
<!-- 등록/수정 삭제 버튼 -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/delete_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/delete_label" />
<Button
android:id="@+id/modify_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/modify_label" />
<Button
android:id="@+id/add_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/add_label" />
</LinearLayout>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:choiceMode="singleChoice" />
<!-- ListView에 표시할 데이터가 없을 때 아래 위젯이 보여짐 -->
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_memo" />
</LinearLayout>
res/ layout/ memo_row.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- memo_row.xml -->
<!-- 목록보기 1 줄에 배치 -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<!-- ID가 표시되는 텍스트 뷰 -->
<TextView
android:id="@+id/_id"
android:layout_width="50dp"
android:layout_height="wrap_content" />
<!-- 메모보기 텍스트 뷰 -->
<TextView
android:id="@+id/memo_text"
android:padding="5px"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
db파일 생성 여부 확인방법은
DDMS 진입후
data > data > 자신의 패키지명 > databases > 파일
저장 해서 보려면은 바로 이 이미지 위에 디스켓 모양이 있는데 파일 선택후 그것을 클릭하면 됩니다.