2013-11-28 2 views
-1

나는 데이터베이스를 생성하고 테이블에 값을 삽입했습니다. 이제 데이터를 선택하려고하는데 다음 오류가 발생합니다. enter image description heresqlite에서 값을 선택하고 반환하는 방법은 무엇입니까?

전체 SQLHelper 클래스 코드를 붙여 넣었습니다. 아무도 내가 실수를하고있는 곳을 알려주시겠습니까?

public class DatabaseHelper extends SQLiteOpenHelper { 
    private static final int DATABASE_VERSION = 1; 

    // Database Name 
    private static final String DATABASE_NAME = "MyDB.db"; 

    // Table Names 
    private static final String TABLE_USERS = "Users"; 
    private static final String TABLE_SCORES = "Scores"; 
    private static final String TABLE_SYNCSTATUS = "SyncStatus"; 

    // Common column names 
    private static final String KEY_ID = "id"; 
    private static final String KEY_CREATED_AT = "created_at"; 

    // USERS Table - column names 
    private static final String KEY_USERID = "userID"; 
    private static final String KEY_USERNAME = "userName"; 
    private static final String KEY_USERPSWD = "userPswd"; 
    private static final String KEY_FIRSTNAME = "firstName"; 
    private static final String KEY_LASTNAME = "lastName"; 

    // SCORES Table - column names 
    private static final String KEY_USER_ID = "userID"; 
    private static final String KEY_GAME_ID = "gameID"; 
    private static final String KEY_SCORES = "scores"; 

    // SYNCSTATUS Table - column names 
    private static final String KEY_STATRDATE = "startDate"; 
    private static final String KEY_ENDDATE = "endDate"; 
    private static final String KEY_STATUS = "status"; 

    // Table Create Statements 
    // USERS table create statement 
    private static final String CREATE_TABLE_USERS = "CREATE TABLE IF NOT EXISTS " 
      + TABLE_USERS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_USERID 
      + " TEXT," + KEY_USERNAME + " INTEGER," + KEY_USERPSWD + " TEXT," 
      + KEY_FIRSTNAME + " TEXT," + KEY_LASTNAME + " TEXT," 
      + KEY_CREATED_AT + " DATETIME" + ")"; 

    // Scores table create statement 
    private static final String CREATE_TABLE_SCORES = "CREATE TABLE IF NOT EXISTS " 
      + TABLE_SCORES + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_USER_ID 
      + " INTEGER," + KEY_GAME_ID + " INTEGER," + KEY_SCORES + " INTEGER," 
      + KEY_CREATED_AT + " DATETIME" + ")"; 

    // Sync table create statement 
    private static final String CREATE_TABLE_SYNCSTATUS = "CREATE TABLE IF NOT EXISTS " 
      + TABLE_SYNCSTATUS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," 
      + KEY_STATRDATE + " DATETIME," + KEY_ENDDATE + " DATETIME," + KEY_STATUS + " INTEGER," 
      + KEY_CREATED_AT + " DATETIME" + ")"; 

    public DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // creating required tables 
     db.execSQL(CREATE_TABLE_USERS); 
     db.execSQL(CREATE_TABLE_SCORES); 
     db.execSQL(CREATE_TABLE_SYNCSTATUS); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // on upgrade drop older tables 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_SCORES); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_SYNCSTATUS); 
     // create new tables 
     onCreate(db); 
    } 

    public int validateUserLogin(String uname, String pswd) 
    { 
     SQLiteDatabase db = this.getReadableDatabase(); 
     String[] whereArgs = new String[]{uname, pswd}; 

     String query = "SELECT "+KEY_USERID+" FROM "+TABLE_USERS+" WHERE "+KEY_USERNAME+" = ? AND "+KEY_USERPSWD+" = ?"; 
     try{ 
      Cursor cur= db.rawQuery(query, whereArgs); 
        //Boolean b = cur.moveToFirst(); 
        if (cur.moveToFirst() == true) 
        { 
         return cur.getInt(cur.getColumnIndex(KEY_USERID)); 
        } 
        else 
         return -1; 
     }catch(Exception e){ 
      return -1; 
     } 

    } 

    public void insertValues(UsersCredential uc){ 
     SQLiteDatabase db= this.getWritableDatabase(); 
     ContentValues cv=new ContentValues(); 
     cv.put(KEY_USERID, uc.getUserID()); 
     cv.put(KEY_USERNAME, uc.getUserName()); 
     cv.put(KEY_USERPSWD, uc.getUserPassword()); 
     cv.put(KEY_FIRSTNAME, uc.getUserFirstName()); 
     cv.put(KEY_LASTNAME, uc.getUserLastName()); 
     cv.put(KEY_CREATED_AT, getDateTime()); 
     db.insert(TABLE_USERS, null, cv); 
    } 

    public void deleteRecords() { 
     SQLiteDatabase db= this.getWritableDatabase(); 
     db.execSQL("delete from Users"); 
    } 

    private String getDateTime() { 
     SimpleDateFormat dateFormat = new SimpleDateFormat(
       "dd-MM-yyyy HH:mm:ss", Locale.getDefault()); 
     Date date = new Date(); 
     return dateFormat.format(date); 
    } 
} 
내가 validateUserLogin(String uname, String pswd) 방법에 예외를 받고 있어요

, 내 코드에 어떤 문제가 있습니까?

+0

사용자 이름이나 암호가 올바르지 않은 경우 코드가 * 디자인 *되어 예외를 throw (처리)하는 것처럼 보입니다. 그럼 뭐가 잘못됐다고 생각하니? (주의 :'cur'은 결코 null이 아닙니다.) –

+0

@ CL 유효한 사용자 이름과 패스워드를 주면, 나 역시 같은 예외가 생깁니다.'cur'이 null이 아니므로' cur.moveToFirst(); int a = cur.getInt (cur.getColumnIndex (KEY_USERID)); return a; '왜이 예외가 발생합니까? – Sush19

답변

1

쿼리가 데이터를 반환하지 않습니다. 이어야합니다. 데이터에 액세스하기 전에 moveToFirst의 반환 값을 확인하십시오.

+0

답장을 보내 주셔서 감사합니다. 내가 작성한 코드는 정확하고 잘 동작한다 ... 나는 체크했다 ..'cur.moveToFirst();'는 행이 선택되면'true'를 리턴하고 그렇지 않으면'false'를 리턴한다. – Sush19

+0

코드가 확인되지 않습니다. 기록이 있다면, 당신은 그 예외를 얻지 못할 것입니다. –

+0

위 코드를 편집했습니다. 그리고 그것의 일하는 벌금 .. 그래서 나는 이것을 대답으로 받아 들인다. – Sush19

관련 문제