데이터 저장하기
테이블에 데이터를 추가할 때는 INSERT INTO 문이 사용됩니다.
INSERT INTO 뒤에는 테이블 이름이 오고 그 뒤에 소괄호가 오게 됩니다.
소괄호 안에는 칼럼들이 들어갑니다.
VALUES 뒤의 소괄호 안에는 데이터를 넣을 수 있습니다.
INSERT INTO 테이블명
(칼럼명1, 칼럼명2, 칼럼명3, ... 칼럼명N)
VALUES
(값1, 값2, 값3, ... 값N);
데이터의 자료형이 문자열이면 작은 따옴표를 붙이고 문자열이 아닌 숫자는 작은 따옴표를 붙이지 않습니다.
예를 들어, 다음과 같은 SQL문을 만들 수 있습니다.
db.execSQL( “insert into employee(name, age, phone) values (‘John‘, 20, ‘010-7788-1234‘“ );
SQL문을 실행할 때는 execSQL 메소드를 호출합니다.
데이터 조회하기
데이터를 조회할 때는 SELECT 문을 사용합니다.
SELECT 문은 다음과 같은 형식으로 만들어집니다.
SELECT [* | DISTINCT] column_name [,columnname2]
FROM tablename1 [,tablename2]
WHERE [condition and|or condition...]
[GROUP BY column-list]
[HAVING conditions]
[ORDER BY “column-list“ [ASC | DESC] ]
조금 복잡해 보이긴 하지만 SELECT 뒤에 조회하려는 칼럼들이 오고 FROM 뒤에는 테이블 이름이 온다고 생각하면 쉽습니다.
가장 단순한 형태라고 할 수 있죠.
여러분이 저장했던 데이터를 employee 테이블로부터 조회하고 싶다면 다음과 같은 SELECT 문을 사용할 수 있습니다.
select name, age, address from employee
만약 조건을 붙이고 싶다면 WHERE 문을 넣을 수 있죠.
이렇게 만들어진 SQL문은 rawQuery 메소드를 호출하면서 전달합니다.
Cursor c1 = db.rawQuery(“select name, age, address from employee“, null);
println(“cursor count : “ + c1.getCount());
조금 더 복잡한 데이터를 다루고 싶을 때는 group by, having, order by 등을 사용하는 경우가 많습니다.
group by, having과 order by 사용법에 대해서는 아래 링크를 참조하세요.
group by 사용하기
having 사용하기
order by 사용하기
커서 다루기
rawQuery 메소드를 호출했을 때 반환되는 객체는 Cursor입니다.
조회했을 때 반환되는 레코드는 한 개일 수도 있고 여러 개일 수도 있는데 이 Cursor 객체를 이용하면 조회된 레코드를 하나씩 참조하면서 데이터를 꺼내볼 수 있습니다.
Cursor 객체는 각각의 레코드를 moveToNext 메소드로 넘겨볼 수 있도록 하며 그 안에 들어있는 칼럼 데이터는 getString, getInt 와 같이 자료형에 맞는 메소드를 이용해 확인할 수 있도록 합니다.
for문이나 while문을 이용하면 Cursor에서 참조하는 모든 조회 결과를 확인해볼 수 있겠네요.
for (int i = 0; i < recordCount; i++) {
c1.moveToNext();
String name = c1.getString(0);
int age = c1.getInt(1);
String phone = c1.getString(2);
println(“Record #“ + i + “ : “ + name + “, “ + age + “, “ + phone);
}
커서 객체로 칼럼 데이터를 확인할 때 사용할 수 있는 메소드들로는 다음과 같은 것들이 있습니다.
public abstract String getString (int columnIndex)
public abstract short getShort (int columnIndex)
public abstract int getInt (int columnIndex)
public abstract long getLong (int columnIndex)
public abstract float getFloat (int columnIndex)
public abstract double getDouble (int columnIndex)
public abstract byte[] getBlob (int columnIndex)
생각해보기
- SELECT 문에 WHERE 조건을 추가해볼 수 있을까요?
- 두 개의 테이블에 들어간 데이터를 SELECT 문 하나로 조회하려면 어떻게 해야 할까요?
참고 자료
comment
http://www.sqlprogram.com/
SQL 문법 참고하세요~
cursor.getString(0); 으로 컬럼 인덱스를 0으로 하면 _id가 등장하네요. 1, 2, 3 으로 하여야 name, age, mobile이 나옵니다.
최신버전은 Android Device Moniter를 지원하지 않는것같아요.. 찾아봤는데 다행히 다른방법 발견했습니다. View -> Tool Windows -> Device File Explorer로가서 데이터베이스 파일 접근하시면 됩니다. 경로 복사해서 DB Browser for SQLite 에서 데이터보기 -> 테이블 -> customer 지정하시면 해당 테이블에도 접근 가능하네요
Where라는 구문을 이번 강의에서 다루지 않아 잘 모르겠네요.. 글에 서술된 Where 뒤에있는 Condition은 뭘 뜻하고 어떤 인수를 집어넣을수 있는지 도통 모르겠습니다
비공개 글입니다.
비공개 글입니다.
비공개 글입니다.
생각해보기
1. 네. WHERE문은 해당 table에서 원하는 조건의 데이터를 가져오고 싶을 때 추가하는 것이라고 배웠습니다.
2. FROM의 parameter로 해당 테이블 두 개를 모두 넣고 WHERE의 조건문에 join을 이용하여 해당 데이터를 가져올 수 있는 조건을 추가하면 하나의 select문만으로 가능할 것 같습니다.