제가 내린 결론은 "Android SQLite query는 결과적으로 sql query를 쓸 수 있어야 한다." 입니다.
아래 출처에 나온 것 공부 하면서 느낀 건 결국 db.execSQL() 과 db.lowquery() 를 써야 하고, sql을 모르면 이게 뭔지 모를 공산이 크다.
몇몇 create table, delete from table, drop table 은 별도로 봐줘야 할 필요가 있지만 그래도 기본은 sql query이다.
왜냐 하면 sql query를 이해하고 이걸 코딩하는 방식으로 변환 하면 끝이기 때문입니다.
아래 코드를 보시면 제가 무슨 말을 하는지 이해가 가실겁니다.
// Table create
String studentSql= "create table " + TB_STUDENT +
" ( " + COLUMN_ID + " integer primary key autoincrement," +
COLUMN_NAME + " not null," +
COLUMN_EMAIL + "," +
COLUMN_PHONE + "," +
COLUMN_PHOTO + ")";
// or
String studentSql = String.format(Locale.US,
"create table %s ('%s' integer primary key autoincrement, '%s' text not null, '%s' text, '%s' text, '%s' text)",
TB_STUDENT,
COLUMN_ID,
COLUMN_NAME,
COLUMN_EMAIL,
COLUMN_PHONE,
COLUMN_PHOTO
);
/*
sql query로 표현
CREATE TABLE "tb_student2" (
"_id" INTEGER PRIMARY KEY AUTOINCREMENT,
"name" TEXT NOT NULL,
"email" TEXT,
"phone" TEXT
);
혹은
CREATE TABLE 'tb_student2' (
'_id' INTEGER PRIMARY KEY AUTOINCREMENT,
'name' TEXT NOT NULL,
'email' TEXT,
'phone' TEXT
);
// 참고로 큰 따옴표는 space를 사용하고 싶을 때만 사용할 수 있습니다.
If you must use spaces, you will need to use double quotes.
아래 AS 처럼 별명을 쓸 때만 사용하고 다른 곳에서는 모두 작은 따옴표를 사용합니다.(안 그럼 에러남)
SELECT COUNT(date) AS "Count Of Date"
FROM tutorial.aapl_historical_stock_price
*/
///////////////////////////////////////////////////////
// insert row
DBHelper helper = new DBHelper(AddStudentActivity.this);
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_NAME, name);
cv.put(COLUMN_EMAIL, email);
cv.put(COLUMN_PHONE, phone);
long newRowId = db.insert(TB_STUDENT, null, cv);
/*
sql query로 표현가능하지만 android API를 사용하는 걸 추천(rawQuery()를 쓰기 복잡)
INSERT INTO tb_student2
VALUES (null, "input name", "input email", "010~");
참고 : https://stackoverflow.com/questions/7470739/how-to-use-rawquery-method-to-insert-a-record
*/
///////////////////////////////////////////////////////
// delete row
String queryString =
"delete from " + TB_STUDENT + " where " + COLUMN_ID + " = " + studentVO.getId();
//or
String queryString = String.format(Locale.US, "delete from %s where %s = %d", TB_STUDENT, COLUMN_ID, studentVO.getId());
Cursor cursor = db.rawQuery(queryString, null);
if(cursor.moveToFirst()){
cursor.close();
db.close();
return true;
}
cursor.close();
db.close();
return false;
/*
sql query로 표현
DELETE FROM tb_student2
WHERE _id = 2
*/
///////////////////////////////////////////////////////
// drop table
db.execSQL("drop table " + TB_STUDENT);
/*
sql qeury로 표현
DROP TABLE tb_student2
*/
공부 방법은 일단 https://mode.com/sql-tutorial/sql-select-statement/ 가서 가입하십니다.
그리고 설명을 이해하고 제공되는 sql 가상 command를 이용해서 연습 문제를 푸시면 됩니다.(영어 압박은 심하지 않은데.. 구글 번역 쓰시면 도움이 됩니다;)
별도로 쿼리를 연습하고 싶으면 DB Browser for SQLite 를 까셔서 연습하시면 됩니다.
DB Browser for SQLite 에 대한 자세한 설명은 이 링크에서 확인해 주세요.
참고로 이 툴로 안드로이드 앱에서 추출된 db table을 볼 수 있습니다.(www.youtube.com/watch?v=hDSVInZ2JCs&feature=youtu.be 55분 경 참고 )
끝.
덧. select와 where의 차이
select와 where의 산술 표현
where는 논리 표현만 가능
select는 논리, 산술 표현이 가능
where 의 경우
불가능 WHERE year +1
가능 WHERE year > 2000
select 의 경우
산술
SELECT year + 1 AS "One Year more", -- 결과는 year에 1년이 더 해짐
month
FROM tutorial.us_housing_units
WHERE year >=2000
논리
SELECT year > 2000 AS "One Year more", -- 결과는 true/false
month
FROM tutorial.us_housing_units
출처 :
SQLite + RecyclerView
www.youtube.com/watch?v=kDZES1wtKUY sql update, delete 포함
SQLite + ListView
SQLite query
https://brunch.co.kr/@minu-log/5
https://mode.com/sql-tutorial/sql-select-statement/
stackoverflow.com/questions/7470739/how-to-use-rawquery-method-to-insert-a-record