2017-12-11 5 views
-3

SQLite 데이터베이스에서 두 개의 열을 어떻게 선택할 수 있습니까?이 코드를 작성했지만 code.can 누군가 잘못되었습니다. 내 실수는 어디에 있습니까?SQlite 데이터베이스에서 선택

cursor = db.rawQuery("SELECT * FROM "+ DatabaseHelper.TableUsers+" WHERE "+DatabaseHelper.COL_UserName,DatabaseHelper.COL_Password+,new String[]{UserName, Password}); 
+2

코드가 컴파일되지 않습니다. 실제 코드를 게시하고 정확하게 어떤 문제가 있는지 지정하십시오. 예외 인 경우 전체 스택 추적을 게시하십시오. – m0skit0

+0

그건 끔찍한 일입니다. 함께 패치하는 대신 저장 프로 시저를 사용하십시오. –

+1

가능한 복제본 [rawQuery (query, selectionArgs)] (https://stackoverflow.com/questions/10598137/rawqueryquery-selectionargs) – m0skit0

답변

2

이 대답은 SQL 용어를 올바르게 사용한다는 사실에 근거하여 즉시 열리고 싶습니다. select two columns은 a에서 반환 된 하나 이상의 (또는 그 이상) 행에서 두 개의 열을 선택한다는 것을 알고 있습니다. 쿼리


WHERE 절을 잘못 사용하고 있습니다. 이것은 열이 주어진 값을 갖는 곳을 선택하기위한 것입니다. 예를 들어 INTEGER PRIMARY_KEY의 표가 있고 id = 10으로 행을 선택하려면 SELECT * FROM table WHERE id=10을 입력하면됩니다.

SELECT * FROM table WHERE id=? 인 지원으로 변환 된 저장 프로 시저를 사용해야하며 인수가있는 String [] 배열을 채워야합니다.

이제 WHERE 절의 실제 기본 사항을 이해 했으므로 코드로 넘어갑니다.

,을 사용 중이므로 더 많은 인수를 문자열 외부에 추가하고 있습니다. 둘째, 전달 된 인수를 여러 개 가질 수 없으며 지원되는 유일한 것은 문자열 목록이며 SQL 주입을 피하기위한 것입니다.

이제 특정 열을 선택하는 것이 더 쉽습니다.

먼저 검색어가 비어 있지 않은지 확인하려면 moveToFirst이 필요합니다. 그런 다음 더 이상의 항목이 남아 있지 않은지 확인하려면 isAfterLast이 사용됩니다. 그런 다음 원하는 값만 선택하면됩니다. 예 : WHERE 키워드 설명에

if (cursor.moveToFirst()) { 
     while (!cursor.isAfterLast()) { 
      //These are just examples of values you can select from the returned row. Edit based on your database and the rows you want. `COLUMN_ID` and `COLUMN_STACKTRACE` 
      //are Strings with the column name 

      int id = cursor.getInt(cursor.getColumnIndex(COLUMN_ID)); 
      String stack = cursor.getString(cursor.getColumnIndex(COLUMN_STACKTRACE)); 
      //Here you'd add these to a List or something, maybe as a dataclass. Essentially, TODO: Handle your data here 
      cursor.moveToNext();//Move to the next row 
     } 
    } 
    cursor.close();//Close the cursor 
} 

추가.

id = 10, field1 = "11.12.17", field3 = "some data here" 행에 ID를 기반으로 행을 선택하려면 SELECT * FROM table WHERE id=10을 사용하여 ID가 ​​10 인 행을 모두 선택하십시오. 당신이 얻을 수있는 다른 것 1000.

+0

로그인 form.after를 만들고 싶습니다. 고객이 registered.go 한 다음 다른 활동으로 이동하고 앱에 로그인합니다. 그리고 내 데이터베이스 UserName && Password –

+0

에서 두 개의 열이 필요합니다. @Miladsoltani 당신에게 좋습니다. 질문 있니? – Zoe

+0

내일 나는이 문제를 해결하려고 노력할 것이다. 고맙습니다 –

1

원시 쿼리 코드는 다음과 같아야합니다

cursor = db.rawQuery("SELECT * FROM "+ DatabaseHelper.TableUsers+" WHERE "+DatabaseHelper.COL_UserName+"='"+UserName+"' And "+DatabaseHelper.COL_Password+"='"+ Password+"'"); 

을 내가 준비된 문을 사용하여 선호하더라도.