如何在 Android Studio 上检索 SQL 数据库中的元素?

Posted

技术标签:

【中文标题】如何在 Android Studio 上检索 SQL 数据库中的元素?【英文标题】:how to retrieve an element in the SQL database on Android Studio? 【发布时间】: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);
        
    

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

【问题讨论】:

【参考方案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 已被使用,因为它不太容易由于硬编码偏移的错误计算而引入无意的错误。

【讨论】:

以上是关于如何在 Android Studio 上检索 SQL 数据库中的元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Real-time Firebase 检索使用 Geofire 设置的多个位置并在 Android Studio 的地图上显示它们?

如何在 Android Studio 中使用改造来检索数据

Android Studio + Linux:如何检索密钥别名 [重复]

如何从 Android Studio 中检索已保存的密钥库密码?

如何在 Firebase 中保存用户分数并在 Android Studio 中实时检索

如何从列表视图中从 sqlite 检索数据单击并查看不同的活动 android studio