I am learning SQlite and I have two classes: DatabaseHelper
and MainActivity
. The first one is responsible for the database. I would like to create a new table, but in the MainActivity
class.
But I am getting this error:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.database.sqlite.SQLiteDatabase.execSQL(java.lang.String)' on a null object reference
The code is:
DatabaseHelper.java
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DBNAME = "ABC.db";
@SuppressLint("SdCardPath")
public static final String DBLOCATION = "/data/data/com.example.abc/databases/";
private Context mContext;
private SQLiteDatabase mDatabase;
public DatabaseHelper(Context context) {
super(context, DBNAME, null, 1);
this.mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void openDatabase() {
String dbPath = mContext.getDatabasePath(DBNAME).getPath();
if (mDatabase != null && mDatabase.isOpen()) {
return;
}
mDatabase = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);
}
public void closeDatabase() {
if (mDatabase != null) {
mDatabase.close();
}
}
public List<ABCMODEL> getListABC() {
ABCModel abcModel = null;
List<ABCModel> abcModelList = new ArrayList<>();
openDatabase();
Cursor cursor = mDatabase.rawQuery("SELECT * FROM abctable ", null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
abcModel = new ABCModel(cursor.getString(0),cursor.getString(0));
abcModelList.add(abcModel);
cursor.moveToNext();
}
cursor.close();
closeDatabase();
return abcModelList;
}
}
MainActivity.java
DatabaseHelper mdatabaseHelper;
SQLiteDatabase msqliteDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mdatabaseHelper= new DatabaseHelper(this);
File database= getApplicationContext().getDatabasePath(DatabaseHelper.DBNAME);
if(false== database.exists()){
mdatabaseHelper.getReadableDatabase();
if(copyDatabase(this)){
Toast.makeText(this,"Copy database succes",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"Copy database error",Toast.LENGTH_SHORT).show();
return;
}
}
mdatabaseHelper.openDatabase();
String query;
query=
"CREATE TABLE abctable2(\n" +
"Text TEXT,\n" +
"Text2 TEXT\n" +
");";
msqliteDatabase.execSQL(query);
mdatabaseHelper.closeDatabase();
}