나는 데이터베이스를 생성하고 테이블에 값을 삽입했습니다. 이제 데이터를 선택하려고하는데 다음 오류가 발생합니다. sqlite에서 값을 선택하고 반환하는 방법은 무엇입니까?
전체 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)
방법에 예외를 받고 있어요
, 내 코드에 어떤 문제가 있습니까?
사용자 이름이나 암호가 올바르지 않은 경우 코드가 * 디자인 *되어 예외를 throw (처리)하는 것처럼 보입니다. 그럼 뭐가 잘못됐다고 생각하니? (주의 :'cur'은 결코 null이 아닙니다.) –
@ CL 유효한 사용자 이름과 패스워드를 주면, 나 역시 같은 예외가 생깁니다.'cur'이 null이 아니므로' cur.moveToFirst(); int a = cur.getInt (cur.getColumnIndex (KEY_USERID)); return a; '왜이 예외가 발생합니까? – Sush19