[android] 행을 계산하는 Android의 SQLite 쿼리

로그인 화면에서 입력 한 로그인 ID와 비밀번호를 데이터베이스에 저장된 것과 비교하는 간단한 로그인 양식을 만들려고합니다.

다음 쿼리를 사용하고 있습니다.

final String DATABASE_COMPARE =
"select count(*) from users where uname=" + loginname + "and pwd=" + loginpass + ");" ;

문제는 어떻게 위의 쿼리를 실행하고 반환 된 개수를 저장할 수 있는지 모르겠습니다.

다음은 데이터베이스 테이블의 모습입니다 (execSQl 메서드를 사용하여 데이터베이스를 성공적으로 만들도록 관리했습니다).

private static final String
DATABASE_CREATE =
            "create table users (_id integer autoincrement, "
            + "name text not null, uname primary key text not null, "
            + "pwd text not null);";//+"phoneno text not null);";

누군가 내가 이것을 어떻게 할 수 있는지 친절하게 안내해 줄 수 있습니까? 가능하면 위의 작업을 수행하기 위해 샘플 스 니펫을 제공하십시오.



답변

DatabaseUtils.queryNumEntries (api : 11 이후)는 원시 SQL (yay!)의 필요성을 없애주는 유용한 대안입니다.

SQLiteDatabase db = getReadableDatabase();
DatabaseUtils.queryNumEntries(db, "users",
                "uname=? AND pwd=?", new String[] {loginname,loginpass});


답변

@scottyab 매개 변수화 된 DatabaseUtils.queryNumEntries (db, table, whereparams) 는 API 11 +에 존재하며 whereparams가없는 것은 API 1 이후 존재합니다 . 대답은 db.rawQuery를 사용하여 커서를 만들어야합니다.

Cursor mCount= db.rawQuery("select count(*) from users where uname='" + loginname + "' and pwd='" + loginpass +"'", null);
mCount.moveToFirst();
int count= mCount.getInt(0);
mCount.close();

매개 변수가있는 쿼리를 사용하는 @Dre의 답변도 마음에 듭니다.


답변

SQLiteStatement를 사용하십시오 .

예 :

 SQLiteStatement s = mDb.compileStatement( "select count(*) from users where uname='" + loginname + "' and pwd='" + loginpass + "'; " );

  long count = s.simpleQueryForLong();


답변

rawQuery (String, String [])Cursor 설명서를 참조하십시오.

귀하의 DADABASE_COMPARE SQL 문이 현재 유효하지 않습니다, loginname그리고 loginpass이스케이프되지 않습니다,이 사이에 공간이 없다 loginname하고는 and), 그리고 당신과 함께 문을 종료; 대신에 ; -암호의 암호를 사용하여 bob으로 로그인 한 경우 해당 문은 다음과 같이 끝납니다.

select count(*) from users where uname=boband pwd=password);

또한 loginname과 loginpass를 연결하는 대신 selectionArgs 기능을 사용해야합니다.

selectionArgs를 사용하려면 다음과 같이하십시오.

final String SQL_STATEMENT = "SELECT COUNT(*) FROM users WHERE uname=? AND pwd=?";

private void someMethod() {
    Cursor c = db.rawQuery(SQL_STATEMENT, new String[] { loginname, loginpass });
    ...
}


답변

이미 Database ( db) 연결이 설정되어 있다고 가정하면 가장 우아한 방법은 Cursor클래스 를 고수하고 다음과 같이하는 것입니다.

String selection = "uname = ? AND pwd = ?";
String[] selectionArgs = {loginname, loginpass};
String tableName = "YourTable";
Cursor c = db.query(tableName, null, selection, selectionArgs, null, null, null);
int result = c.getCount();
c.close();
return result;


답변

카운트 열을 얻는 방법

final String DATABASE_COMPARE = "select count(*) from users where uname="+loginname+ "and pwd="+loginpass;

int sometotal = (int) DatabaseUtils.longForQuery(db, DATABASE_COMPARE, null);

이것은 가장 간결하고 정확한 대안입니다. 커서와 닫기를 처리 할 필요가 없습니다.


답변

ContentProvider를 사용하는 경우 다음을 사용할 수 있습니다.

Cursor cursor = getContentResolver().query(CONTENT_URI, new String[] {"count(*)"},
            uname=" + loginname + " and pwd=" + loginpass, null, null);
    cursor.moveToFirst();
    int count = cursor.getInt(0);