Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从sqlite中选择和返回值?_Sqlite - Fatal编程技术网

如何从sqlite中选择和返回值?

如何从sqlite中选择和返回值?,sqlite,Sqlite,我已经创建了数据库并将值插入到表中。现在我尝试选择一个数据,但出现以下错误: 我已经粘贴了我的整个SQLHelper类代码。有人能告诉我我哪里做错了吗 public class DatabaseHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; // Database Name private static final String DATABASE_NAME

我已经创建了数据库并将值插入到表中。现在我尝试选择一个数据,但出现以下错误:

我已经粘贴了我的整个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)
方法中遇到异常,我的代码有什么问题?

您的查询不会返回任何数据。
您必须先检查
moveToFirst
的返回值,然后才能尝试访问数据。

如果用户名或密码不正确,代码似乎设计为引发(然后处理)异常。那你为什么认为有什么不对劲?(注意:
cur
从来都不是
null
)@CL当我给出有效的用户名和密码时,它也会给出相同的异常。。正如您所说的,
cur
从不为空,因此我更改了我的代码
cur.moveToFirst();inta=cur.getInt(cur.getColumnIndex(KEY_USERID));返回a为什么我会收到此异常?谢谢您的回复。我写的代码是正确的,它的工作很好。。。我查过<代码>cur.moveToFirst()返回
true
,否则
false
。您的代码不会进行检查。如果有记录,你就不会得到那个异常。我已经编辑了上面的代码。而且它工作得很好。。所以我接受这个答案。。。