【问题标题】:how to retrieve an element in the SQL database on Android Studio?如何在 Android Studio 上检索 SQL 数据库中的元素?
【发布时间】:2019-07-03 01:06:38
【问题描述】:

我在 Android Studio 上用 SQL 创建了一个数据库,但我无法恢复和更新这个数据库中的数据。

我检查了很多网站和指南,但没有一个给我正确的答案。

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("Create table user(pseudo text primary key, password text, email text, points integer, pointsshop integer)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists user");
    }
    //inserting in database
    public boolean insert(String pseudo, String password, String email, int points, int pointsshop){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("pseudo",pseudo);
        contentValues.put("password",password);
        contentValues.put("email",email);
        contentValues.put("points",points);
        contentValues.put("pointsshop",pointsshop);
        long ins = db.insert("user",null,contentValues);
        if(ins==-1)return false;
        else return true;
    }

    public void update_points(int points, String pseudo){
            this.getWritableDatabase().execSQL("update user set 
    points='" + points + "' where pseudo='" + pseudo + "'");
        }
        public int get_points(String pseudo){
            SQLiteDatabase db = this.getReadableDatabase();
            Cursor cursor = db.rawQuery("Select points from user where 
            pseudo=?",new String[]{pseudo});
            return cursor.getInt(0);
        }
    }
}

我想从我的数据库中获取数据“点”,但是当我运行我的应用程序时,这个崩溃了

【问题讨论】:

    标签: java sqlite android-studio


    【解决方案1】:

    虽然您已提取光标,但光标位于名为 beforeFirstRow 的位置,您需要先移动到光标中的一行(如果有),然后才能检索数据。

    你应该总是在完成后关闭光标。由于您没有返回游标,因此应在返回从游标中提取的值之前将其关闭。

    尝试以下方法:-

    public int get_points(String pseudo) {
        int rv = -1;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery("Select points from user where 
        pseudo=?",new String[]{pseudo});
        if (cursor.moveToFirst()) {
            rv = cursor.getInt(cursor.getColumnIndex("points"));
        }
        cursor.close();
        return rv;   
    }
    
    • 请注意,如果没有提取数据,则上述内容将返回 -1。此值可能不是没有提取数据的有用指标,因此您可能需要使用不同的值。
    • 如果可以进行移动,Cursor move 方法(如上面使用的 moveToFirst)返回 true,否则返回 false。因此if (cursor.moveToFirst())
    • getColumnIndex 已被使用,因为它不太容易由于硬编码偏移的错误计算而引入无意的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 2019-04-07
      • 2017-08-25
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多