.database.sqlite.SQLiteDatabase.execSQL(java.lang.String)'для ссылки на пустой объект

При запуске метода db.exec(q) он показывает нулевую ссылку на объект.БД является объектом класса SQLiteDatabase. и exec() является абстрактным методом, который переопределяется. Вот код класса DatabaseHelper, расширенный SQLiteOpenHelper

public class MyDbHelper extends SQLiteOpenHelper{

SQLiteDatabase db;
Context context;


MyDbHelper(Context context)
{
    super(context,"userDB",null,1);
    this.context = context;
    db = this.getWritableDatabase();
}


@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {


    String q = "create table user(uname text primary key,uage text,uphone text,bmi float)";
    db.execSQL(q);

}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

}


public void addData(String uname,String uage,String uphone,Double bmi)
{

    ContentValues cv = new ContentValues();
    cv.put("uname",uname);
    cv.put("uage",uage);
    cv.put("uphone",uphone);
    cv.put("bmi",bmi);
    long rid = db.insert("user",null,cv);

    if(rid<0)
    {
        Toast.makeText(context, "Insert Issue !!!!!", Toast.LENGTH_SHORT).show();
    }
    else
    {
        Toast.makeText(context, "Record Inserted !!!!!", Toast.LENGTH_SHORT).show();
    }
}

public String viewData()
{

    StringBuffer sb = new StringBuffer();
    Cursor c = db.query("user",null,null,null,null,null,null);
    c.moveToFirst();

    if(c.getCount() == 0 )
    {
        sb.append("No Records To Display");
    }
    else
    {
        do{
            String uname = c.getString(0);
            String uage = c.getString(1);
            String uphone = c.getString(2);
            float bmi = c.getFloat(3);
            sb.append("User : " +uname+ "\nAge : " +uage+ "\nPhone : " +uphone+ "\nBMI : " +bmi+ "\n\n---------------\n\n");


        }while (c.moveToNext());
    }

    return sb.toString();




}

}

1 ответ

Решение

Замени это

 db.execSQL(q);

с этим

 sqLiteDatabase.execSQL(q);

onCreate будет запущен при первой установке приложения, и вам нужно использовать sqLiteDatabase ссылка для выполнения команд SQL и db будет инициализирован, когда вы создаете MyDbHelper учебный класс

Другие вопросы по тегам