2016-08-18 4 views
1

매개 변수 값 내에 정수를 바인딩하는 SQL 문을 작성하고 싶습니다. 열 COLUMN_PRIORITY의 값은 10입니다. 어떻게 쿼리 안에 넣을 수 있습니까?내부에 정수가있는 android sqlite 문 값이

SQLiteStatement sqLiteStatement = db.compileStatement("" + "INSERT OR REPLACE INTO " + TABLE_NAME + " (" + 
       COLUMN_ID + ", " + 
       COLUMN_TITLE + ", " + 
       COLUMN_PRIORITY + ", " + 
       COLUMN_CREATED_AT + ", " + 
       COLUMN_UPDATED_AT + ") " + 
       "Values (?,?," + 
        10 + ", " + 
       createdAt + ", " + updatedAt") ") ; 

     sqLiteStatement.bindString(1, contextId); 
     sqLiteStatement.bindString(2, bubbleDetails.getId()); 
     sqLiteStatement.execute(); 

이 문구는 유효하지 않습니다.

+0

무엇이 오류입니까? –

+1

compileStatement 메소드를 호출하기 전에 전달 된 문자열을 인쇄하십시오. 뭔가가 돋보일 수 있습니다. –

+0

문자열을 인쇄 했으므로 멋지게 보입니다. 문제는 "값 (?,?,"+ 10 + ","+ createdAt + ","+ updatedAt ")"안에는 varaibles 및 정수 값을 가져올 것으로 예상되지만 물음표가 나타날 것으로 예상됩니다. . – user2924714

답변

0

ContentValues 개체를 허용하는 db.insert 메서드를 사용해보십시오.

ContentValues values = new ContentValues(); 
values.put(COLUMN_PRIORITY, 10); 
//... Other columns 
db.insert(TABLE_NAME, null, values); 
+0

감사합니다. 이것이 제가 사용했던 해결 방법입니다. 콘텐츠 값없이이 작업을 수행 할 수있는 방법이 있는지 궁금합니다. – user2924714

+1

"해결 방법"이 아닙니다. IMO는 SQL 주입을 방지하기위한 권장 방법입니다. 그리고 어쨌든'int' 값을 받아들이는'bindString' 메쏘드가 보이지 않습니다, 그래서 당신이'bindString (x, String.valueOf (id))'를 사용할 필요가 있다고 생각합니다. –