로그인 화면에서 입력 한 로그인 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);