JY Tech

[SQL, java, android] 변수에 값을 sql에 넣기 본문

Programming/Study

[SQL, java, android] 변수에 값을 sql에 넣기

J.Dragon 2024. 1. 11. 23:02

먼저 db에 다음과 같은 데이터가 있다고 가정해보자

Name Date Kg
홍길동 2024-01-12 77.3
홍길동 2024-01-15 77.5

 

 

String dateVal="2024-01-12"

DataBaseHelper dbHelper = new DataBaseHelper(context);

SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT Kg FROM weight WHERE Date=dateVal", null);

그리고 자바(안드로이드)에서 위와 같은 코드로 데이터를 가져온다고 가정하자

 

아마 오류가 생길 것이다.

 

sql에 직접적으로 값을 전달하려고 해서 그렇다.

 

여러가지 방법이 있겠지만 ?를 넣는게 방법이다.

위 코드를 그런식으로 수정하면

String dateVal="2024-01-11"

DataBaseHelper dbHelper = new DataBaseHelper(context);

SQLiteDatabase db = dbHelper.getReadableDatabase();

String query = "SELECT Kg FROM weight WHERE Date=?";//이렇게 변수를 직접 전달하지 말고 ?로 전달

Cursor cursor = db.rawQuery(query, new String[]{selectedDate}); //이곳에서 ?에 들어갈 값을 넣어주기

 

이렇게 파리미터를 ?로 치환하는걸 '파라미터 바인딩'이라고 한다.

 

이러한 방식은 SQL인젝션에 효과적으로 대응할 수 있는 방법 중 하나이다

(SQL인젝션은 추후 다시 다루겠다)