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

时间:2019-02-08 18:33:51

标签: java sqlite android-studio

我在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 个答案:

答案 0 :(得分:1)

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

完成操作后,应始终关闭光标。由于您不返回游标,因此应先将其关闭,然后再返回从游标中提取的值。

尝试以下方法:-

import { Component, ElementRef, ViewChild, AfterViewInit} from '@angular/core';

@Component({
    selector: 'app',
    template: `
        <div #myivId>Some text</div>
    `, }) export class AppComponent implements AfterViewInit {
    @ViewChild('myDivId') myDiv: ElementRef;

    ngAfterViewInit() {
        console.log(this.myDiv.nativeElement.innerHTML);
    } }
  • 请注意,如果未提取任何数据,则以上内容将返回 -1 。此值可能不是一个有用的指标,表明没有提取任何数据,因此您可能需要使用其他值。
  • 如果可以进行移动,则moveToFirst move 方法(例如上面使用的getColumnIndex)将返回true,否则返回false。因此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; }
  • {{3}}已被使用,因为它由于硬编码偏移的错误计算而不太可能引入无意的错误。