android
SQLiteOpenHelper, SQLiteQueryBuilder
우혁이 아빠
2010. 7. 4. 17:42
출처 : http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
public abstract class SQLiteOpenHeldper
Class Overview
데이터베이스 생성과 버전 관리를 담당하는 helper 클래스이다. onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int), 옵션인 onOpen(SQLiteDatabase) 메소드를 구현하는 서브클래스를 생성한다, 이 클래스는 데이터베이스가 존재하면 오픈하고, 존재하지 않으면 생성하며, 필요하면 업그레이드 한다. 데이터베이스가 항상 sensible 상태인 것을 확인하기 위하여 트랜잭션이 사용된다.
예제는 NotePad 샘플 어플리케이션의 NotePadProvider를 보라.
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + NOTES_TABLE_NAME + " ("
+ Notes._ID + " INTEGER PRIMARY KEY,"
+ Notes.TITLE + " TEXT,"
+ Notes.NOTE + " TEXT,"
+ Notes.CREATED_DATE + " INTEGER,"
+ Notes.MODIFIED_DATA + " INTEGER"
+ ");");
}
}
생성자에서 테이블 명을 파라미터로 해서 부모클래스의 생성자를 생성하는 것을 주의하라.
부모클래스는 DB에 파라미터의 테이블이 존재하지 않을 때만 onCreate() 메소드를 호출한다는 사실을 알고 있어야 한다.
출처 : http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html
public class SQLiteQueryBuilder
Class Overview
SQLiteDatabase 객체에 보낼 SQL 쿼리를 작성하는 데 도움을 주는 클래스이다.
public Cursor query(SQLiteDatabase db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder, String limit)
db : 질의할 DB
projectionIn : 리턴할 칼럼 목록이다. 모든 칼럼을 리턴 받고 싶으면 null을 전달하라, 그러면 사용되지 않는 칼럼을 요청하는 실수를 방지
할 수 있다.
selection :
selectionArgs :
groupBy :
having :
sortOrder
limit :
샘플
[DBOpenHelper.java]
public class DBOpenHelper extedns SQLiteOpenHelper {
private static final String DbName = "myDB.db";
private static final int DbVersion = 2;
static final String Table = "myTable";
SQLiteDatabase db;
public DBHelper(Context context) {
super(context, DbName, null, DbVersion);
db = getWritableDatabase();
}
/**
* 이 메소드는 오직 한번만 호출된다.
*/
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + Table + " ("
+ "id INTEGER PRIMARY KEY AUTOINCREMENT,"
+ "userid TEXT,"
+ "password TEXT,"
+ "name TEXT"
+ ");"
);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + Table);
onCreate(db);
}
public synchronized void close() {
db.close();
super.close();
}
/**
* SQL insert query
*/
public void insertRow(ContentValues values) {
Long rowid = db.insert(Table, "", values);
if (rowid < 0) Log.e("DBHelper", "db insert failed : " + rowid);
else Log.d("DBHelper", "db insert success : " + rowid);
}
/**
* SQL update query
* @param values : values에 key가 id 인 value가 있어야 한다.
*/
public void updateRow(ContentValues values) {
db.update(Table, values, "id = " + values.getAsString("id"), null);
}
/**
* row 개수
*/
public int getCount(Cursor c) {
return c.getCount();
}
/**
* SQL select query
*/
public Cursor select() {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(Table);
return qb.query(db, null, null, null, null, null, null);
}
/**
* select * from Table where id = ?
*/
public Cursor selectWithId(String id) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(Table);
String[] sargs = { id };
return qb.query(db, null, "id=?", sargs, null, null, null);
}
}
[select query 방법]
String id = "aaa";
String[] projection = {"id", "password", "name"};
String[] sargs = { id };
Cursor c = qb.query(db, null, "id=?", sargs, null, null, null);
ContentValues values = new ContentValues();
if (c != null) {
if (c.moveToFirst()) {
do {
for (int i = 0; i < c.getColumnCount(); i++) {
values.put(c.getColumnName(i), c.getString(i));
}
break;
} while (c.moveToNext());
}
if (values != null) {
System.out.println(values.getAsString("id"));
System.out.println(values.getAsString("password"));
System.out.println(values.getAsString("name"));
}
}
[insert query 방법]
[update query 방법]
Contentvalues values = new ContentValues();
values.put("id", "aaa");
values.put("password", "bbb");
values.put("name", "에프액스");
DBHelper dbHelper = new DBHelper(this);
// 이미 테이블에 id를 가지고 있는 row가 있을 경우 update 없을 경우 insert
Cursor c = dbHelper.selectWithId(bssid);
if (c.getCount() > 0) dbHelper.updateRow(value);
else dbHelper.insertRow(values);
public abstract class SQLiteOpenHeldper
Class Overview
데이터베이스 생성과 버전 관리를 담당하는 helper 클래스이다. onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int), 옵션인 onOpen(SQLiteDatabase) 메소드를 구현하는 서브클래스를 생성한다, 이 클래스는 데이터베이스가 존재하면 오픈하고, 존재하지 않으면 생성하며, 필요하면 업그레이드 한다. 데이터베이스가 항상 sensible 상태인 것을 확인하기 위하여 트랜잭션이 사용된다.
예제는 NotePad 샘플 어플리케이션의 NotePadProvider를 보라.
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + NOTES_TABLE_NAME + " ("
+ Notes._ID + " INTEGER PRIMARY KEY,"
+ Notes.TITLE + " TEXT,"
+ Notes.NOTE + " TEXT,"
+ Notes.CREATED_DATE + " INTEGER,"
+ Notes.MODIFIED_DATA + " INTEGER"
+ ");");
}
}
생성자에서 테이블 명을 파라미터로 해서 부모클래스의 생성자를 생성하는 것을 주의하라.
부모클래스는 DB에 파라미터의 테이블이 존재하지 않을 때만 onCreate() 메소드를 호출한다는 사실을 알고 있어야 한다.
출처 : http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html
public class SQLiteQueryBuilder
Class Overview
SQLiteDatabase 객체에 보낼 SQL 쿼리를 작성하는 데 도움을 주는 클래스이다.
public Cursor query(SQLiteDatabase db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder, String limit)
db : 질의할 DB
projectionIn : 리턴할 칼럼 목록이다. 모든 칼럼을 리턴 받고 싶으면 null을 전달하라, 그러면 사용되지 않는 칼럼을 요청하는 실수를 방지
할 수 있다.
selection :
selectionArgs :
groupBy :
having :
sortOrder
limit :
샘플
[DBOpenHelper.java]
public class DBOpenHelper extedns SQLiteOpenHelper {
private static final String DbName = "myDB.db";
private static final int DbVersion = 2;
static final String Table = "myTable";
SQLiteDatabase db;
public DBHelper(Context context) {
super(context, DbName, null, DbVersion);
db = getWritableDatabase();
}
/**
* 이 메소드는 오직 한번만 호출된다.
*/
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + Table + " ("
+ "id INTEGER PRIMARY KEY AUTOINCREMENT,"
+ "userid TEXT,"
+ "password TEXT,"
+ "name TEXT"
+ ");"
);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + Table);
onCreate(db);
}
public synchronized void close() {
db.close();
super.close();
}
/**
* SQL insert query
*/
public void insertRow(ContentValues values) {
Long rowid = db.insert(Table, "", values);
if (rowid < 0) Log.e("DBHelper", "db insert failed : " + rowid);
else Log.d("DBHelper", "db insert success : " + rowid);
}
/**
* SQL update query
* @param values : values에 key가 id 인 value가 있어야 한다.
*/
public void updateRow(ContentValues values) {
db.update(Table, values, "id = " + values.getAsString("id"), null);
}
/**
* row 개수
*/
public int getCount(Cursor c) {
return c.getCount();
}
/**
* SQL select query
*/
public Cursor select() {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(Table);
return qb.query(db, null, null, null, null, null, null);
}
/**
* select * from Table where id = ?
*/
public Cursor selectWithId(String id) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(Table);
String[] sargs = { id };
return qb.query(db, null, "id=?", sargs, null, null, null);
}
}
[select query 방법]
String id = "aaa";
String[] projection = {"id", "password", "name"};
String[] sargs = { id };
Cursor c = qb.query(db, null, "id=?", sargs, null, null, null);
ContentValues values = new ContentValues();
if (c != null) {
if (c.moveToFirst()) {
do {
for (int i = 0; i < c.getColumnCount(); i++) {
values.put(c.getColumnName(i), c.getString(i));
}
break;
} while (c.moveToNext());
}
if (values != null) {
System.out.println(values.getAsString("id"));
System.out.println(values.getAsString("password"));
System.out.println(values.getAsString("name"));
}
}
[insert query 방법]
[update query 방법]
Contentvalues values = new ContentValues();
values.put("id", "aaa");
values.put("password", "bbb");
values.put("name", "에프액스");
DBHelper dbHelper = new DBHelper(this);
// 이미 테이블에 id를 가지고 있는 row가 있을 경우 update 없을 경우 insert
Cursor c = dbHelper.selectWithId(bssid);
if (c.getCount() > 0) dbHelper.updateRow(value);
else dbHelper.insertRow(values);
[출처] [Android]SQLiteOpenHelper, SQLiteQueryBuilder|작성자 네이밍
http://blog.naver.com/ugigi?Redirect=Log&logNo=70088854337 --> 여기서 퍼왔네요
개념정리가 안돼 찾아보다가...