.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
учебный класс