[전]Android 는 SQLiteDatabase 를 사용 하여 SQLite 데이터 베 이 스 를 조작 합 니 다[학습 기록]

Android 는 SQLiteDatabase 라 는 클래스 를 제공 합 니 다.이 클래스 는 데이터 베 이 스 를 조작 하 는 API 를 패키지 합 니 다.이 클래스 를 사용 하면 데이터 추가(Create),조회(Retrieve),업데이트(Update),삭제(Delete)작업 을 수행 할 수 있 습 니 다.SQLiteDatabase 에 대한 학습 은 execSQL()과 rawQuery()방법 을 중점적으로 파악 해 야 합 니 다.execSQL()방법 은 insert,delete,update,CREATE TABLE 와 같은 변 경 된 행 위 를 가 진 SQL 문 구 를 실행 할 수 있 습 니 다.rawQuery()방법 은 selection 문 구 를 실행 하 는 데 사 용 됩 니 다.
execSQL()방법의 사용 예:
SQLiteDatabase db = ....;
db.execSQL("insert into person(name, age) values('    ', 4)");
db.close();

위의 SQL 문 구 를 실행 하면 person 표 에 기록 을 추가 합 니 다.실제 응용 에서 문장의'퍼 가기 팟 캐 스 트'라 는 매개 변수 값 은 사용자 가 입력 한 인터페이스 에서 제공 합 니 다.사용자 가 입력 한 내용 을 그대로 조합 하면 사용자 가 입력 한 내용 에 작은 따옴표 가 있 을 때 그룹 에서 맞 춘 SQL 문 구 는 문법 오류 가 발생 합 니 다.이 문 제 를 해결 하려 면 작은 따옴표 에 대해 전의 해 야 한다.즉,작은 따옴표 를 두 개의 작은 따옴표 로 바 꾸 는 것 이다.어떤 때 사용 자 는'&'와 같은 특수 SQL 기 호 를 입력 하기 도 한다.그룹 이 맞 춘 SQL 문장의 문법 이 정확 하도록 하기 위해 반드시 SQL 문장의 이러한 특수 SQL 기 호 를 모두 전의 해 야 한다.분명히 모든 SQL 문장 에 대해 이런 처리 작업 을 하 는 것 은 비교적 번거롭다.SQLiteDatabase 클래스 는 다시 불 러 온 exec SQL(String sql,Object[]bidArgs)방법 을 제공 합 니 다.이 방법 을 사용 하면 앞에서 언급 한 문 제 를 해결 할 수 있 습 니 다.이 방법 은 자리 표시 자 인자(?)를 사용 하 는 것 을 지원 하기 때 문 입 니 다.사용 예 는 다음 과 같 습 니 다.
SQLiteDatabase db = ....;
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"    ", 4}); 
db.close();

execSQL(String sql,Object[]bindArgs)방법의 첫 번 째 매개 변 수 는 SQL 문장 이 고,두 번 째 매개 변 수 는 SQL 문장 에서 자리 차지 문자 파라미터 의 값 이 며,매개 변수 값 은 배열 에서 의 순서 와 자리 차지 문자 의 위치 에 대응 해 야 합 니 다.
SQLiteDatabase 의 rawQuery()는 selection 문 구 를 실행 하 는 데 사 용 됩 니 다.예 를 들 어 다음 과 같 습 니 다.
 SQLiteDatabase db = ....;
Cursor cursor = db.rawQuery(“select * from person”, null);
while (cursor.moveToNext()) {
	int personid = cursor.getInt(0); //       ,       0  
	String name = cursor.getString(1);//       
	int age = cursor.getInt(2);//       
}
cursor.close();
db.close(); 

rawQuery()방법의 첫 번 째 매개 변 수 는 selection 구문 입 니 다.두 번 째 매개 변 수 는 selection 구문 에서 자리 표시 자 매개 변수 값 입 니 다.selection 문 구 는 자리 표시 자 를 사용 하지 않 으 면 이 매개 변 수 는 null 로 설정 할 수 있 습 니 다.자리 표시 자 인자 가 있 는 selection 문 구 는 다음 과 같 습 니 다.
Cursor cursor = db.rawQuery("select * from person where name like ? and age=?", new String[]{"%  %", "4"});

Cursor 는 결과 집합 커서 로 결과 집합 을 무 작위 로 방문 하 는 데 사 용 됩 니 다.jdbc 에 익숙 하 다 면 사실 Cursor 는 JDBC 의 ResultSet 역할 과 비슷 합 니 다.moveToNext()방법 을 사용 하면 커서 를 현재 줄 에서 다음 줄 로 이동 할 수 있 습 니 다.결과 집의 마지막 줄 을 옮 겼 다 면 결 과 를 false 로 되 돌려 줍 니 다.그렇지 않 으 면 true 입 니 다.또한 Cursor 는 자주 사용 하 는 moveToPrevious()방법(커서 를 현재 줄 에서 이전 줄 로 이동 하 는 데 사 용 됩 니 다.결과 집의 첫 줄 을 옮 겼 다 면 되 돌아 오 는 값 은 false 입 니 다.그렇지 않 으 면 true 입 니 다),moveToFirst()방법(커서 를 결과 집의 첫 줄 로 이동 합 니 다.결과 집합 이 비어 있 으 면 되 돌아 오 는 값 은 false 입 니 다.그렇지 않 으 면 true)와 moveToLast()방법(결과 집의 마지막 줄 로 커서 를 이동 합 니 다.결과 집합 이 비어 있 으 면 값 을 false 로 되 돌려 줍 니 다.그렇지 않 으 면 true 입 니 다).
앞서 소개 한 exec SQL()과 rawQuery()방법 을 제외 하고 SQLiteDatabase 는 추가,삭제,업데이트,조회 에 대응 하 는 조작 방법 도 제공 합 니 다.insert(),delete(),update()와 query().이러한 방법 은 실제 적 으로 SQL 문법 을 잘 모 르 는 초보 자 들 에 게 사용 되 는 것 이다.SQL 문법 을 잘 아 는 프로그래머 에 게 는 exec SQL()과 rawQuery()방법 으로 SQL 문 구 를 직접 실행 하면 데이터 의 추가,삭제,업데이트,조회 작업 을 완성 할 수 있다.
Insert()방법 은 데 이 터 를 추가 하 는 데 사 용 됩 니 다.각 필드 의 데 이 터 는 ContentValues 를 사용 하여 저장 합 니 다.ContentValues 는 MAP 와 유사 합 니 다.MAP 에 비해 액세스 데이터 에 대응 하 는 put(String key,Xxx value)와 getAsXxx(String key)방법 을 제공 합 니 다. key 는 필드 이름 이 고 value 는 필드 값 입 니 다.Xxx 는 String,Integer 등 자주 사용 하 는 데이터 형식 을 말 합 니 다.
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "    ");
values.put("age", 4);
long rowid = db.insert(“person”, null, values);//         ,   id  

세 번 째 매개 변수 가 데 이 터 를 포함 하 든 안 하 든 Insert()방법 을 실행 하면 기록 을 추가 합 니 다.세 번 째 매개 변수 가 비어 있 으 면 메 인 키 를 제외 한 다른 필드 값 이 Null 인 기록 을 추가 합 니 다.Insert()방법 내 부 는 실제 적 으로 insert SQL 문 구 를 구성 하여 데 이 터 를 추가 합 니 다.Insert()방법의 두 번 째 매개 변 수 는 빈 값 필드 의 이름 을 지정 하 는 데 사 용 됩 니 다.이 매개 변 수 는 의 심 스 러 울 것 이 라 고 믿 습 니 다.이 매개 변수의 역할 은 무엇 입 니까?이 렇 습 니 다.세 번 째 매개 변수 values 가 Null 이거 나 요소 개수 가 0 이면 insert()방법 은 홈 키 를 제외 한 다른 필드 가 Null 값 인 기록 을 추가 해 야 하기 때 문 입 니 다.SQL 문법 수 요 를 만족 시 키 기 위해 insert 문 구 는 필드 이름 을 지정 해 야 합 니 다.예 를 들 어 insert into person(name)values(NULL)는 필드 이름 을 지정 하지 않 으 면insert 문 구 는 이렇게 되 었 습 니 다.insert into person()values()는 표준 SQL 의 문법 에 만족 하지 않 는 것 이 분명 합 니 다.필드 이름 에 대해 서 는 홈 키 이외 의 필드 를 사용 하 는 것 을 권장 합 니 다.INTEGER 형식의 홈 키 필드 를 사용 했다 면 insert into personid(personid)values(NULL)와 같은 insert 문 구 를 실행 한 후에 도 이 홈 키 필드 값 은 NULL 이 되 지 않 습 니 다.세 번 째 매개 변수 values 가 Null 이 아니 고 요소 의 개수 가 0 보다 많 으 면 두 번 째 매개 변 수 를 null 로 설정 할 수 있 습 니 다.
//delete()     :
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete("person", "personid<?", new String[]{"2"});
db.close();
//       person    personid  2   。

//update()     :
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(“name”, “    ”);//key    ,value  
db.update("person", values, "personid=?", new String[]{"1"}); 
db.close();
//       person  personid  1    name      “    ”。

query()방법 은 실제 적 으로 selection 문 구 를 여러 개의 구성 부분 으로 나 눈 다음 에 방법 으로 입력 하 는 매개 변수 입 니 다.
SQLiteDatabase db = databaseHelper.getWritableDatabase();
Cursor cursor = db.query("person", new String[]{"personid,name,age"}, "name like ?", new String[]{"%  %"}, null, null, "personid desc", "1,2");
while (cursor.moveToNext()) {
         int personid = cursor.getInt(0); //       ,       0  
        String name = cursor.getString(1);//       
        int age = cursor.getInt(2);//       
}
cursor.close();
db.close(); 

위의 코드 는 person 표 에서 name 필드 에'전지'가 들 어 있 는 기록 을 찾 는 데 사 용 됩 니 다.일치 하 는 기록 은 personid 내림차 순 으로 정렬 되 고 정렬 된 결과 에 대해 첫 번 째 기록 을 생략 하고 2 개의 기록 만 가 져 옵 니 다.
query(table,columns,selection,selectionArgs,groupBy,having,orderBy,limit)방법 각 매개 변수의 의미:
테이블:시계 이름.selection 구문 from 키워드 뒤의 부분 에 해당 합 니 다.다 중 표 연합 조회 라면 쉼표 로 두 표 의 이름 을 나 눌 수 있다.
columns:검색 할 열 이름 입 니 다.selection 구문 select 키워드 뒤의 부분 에 해당 합 니 다.
selection:검색 조건 자구,selection 구문 where 키워드 뒤의 부분 에 해당 하 며,조건 자구 에 서 는 자리 표시 자 를 사용 할 수 있 습 니 다."?"
selection Args:selection 구문 에서 차지 하 는 문자 의 값 에 대응 합 니 다.값 이 배열 에 있 는 위치 와 차지 하 는 문자 가 구문 에 있 는 위치 가 일치 해 야 합 니 다.그렇지 않 으 면 이상 이 생 길 수 있 습 니 다.
groupby:selection 구문 group by 키워드 뒤의 부분 에 해당 합 니 다.
having:selection 구문 having 키워드 뒤의 부분 에 해당 합 니 다.
orderby:selection 구문 orderby 키워드 뒤의 부분 에 해당 합 니 다.예 를 들 어 personid desc,age asc;
limit:오프셋 과 가 져 온 기록 수 를 지정 합 니 다.selection 구문 limit 키워드 뒤의 부분 에 해당 합 니 다.

좋은 웹페이지 즐겨찾기