The SQLite database
is not created. I am playing with this for the past few hours but now i got tired a lot. I am not getting any errors or warnings in the Log Cat
. Here is my code what I have tried so far. Help will be appreciated.
public class MySQLiteHelper extends SQLiteOpenHelper{
final static String DB_NAME = "citiesdata.db";
final static String TABLE_NAME = "allcities";
final static String ID = "_id";
final static String CITY_CODE = "city_code";
final static int DB_VERSION = 1;
private SQLiteDatabase db;
Context cont;
public MySQLiteHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
cont = context;
Toast.makeText(cont, "constructor called", Toast.LENGTH_LONG).show();
}
@Override
public void onCreate(SQLiteDatabase db) {
Toast.makeText(cont, "onCreate method called", Toast.LENGTH_LONG).show();
String createTable = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + CITY_CODE + " TEXT);";
db.execSQL(createTable);
// INSERTING RECORDS IN DATABASE
SQLiteDatabase writableDB = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(CITY_CODE, "333");
writableDB.insert(TABLE_NAME, null, values);
writableDB.close();
readCity();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Toast.makeText(cont, "onUpgrade method called", Toast.LENGTH_LONG).show();
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public void readCity(){
Toast.makeText(cont, "readCity method called", Toast.LENGTH_LONG).show();
String selectQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
Toast.makeText(cont, cursor.getString(cursor.getColumnIndex(CITY_CODE)), Toast.LENGTH_LONG).show();
db.close();
}
}
Calling the Constructor in the main UI Thread on a button click like this.
new MySQLiteHelper(MainActivity.this);
Permissions are...
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
Thanks a lot in advance.
At last, I shot the problem directly into the head. But How?
The logic of the SQLiteOpenHelper
is that it doesn't call the onCreate
method by only creating its object.
onCreate
method for the first time.onUpgrade
method will be called if the database is available but the version is lower than the one you provide. I created a fillTable
method in my MySQLiteHelper
class where I tried to access the database for the first time for writing by calling getWritableDatabase
method of the SQLiteOpenHelper
. The definition of the fillTable
method looks like this.
public void fillTable(){
db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(CITY_CODE, "333");
db.insert(TABLE_NAME, null, values);
db.close();
readCity();
}
Call the fillTable method on a new instance of the class:
new MySQLiteHelper(MainActivity.this).fillTable();
Thanks to all those who tried to help me in comments.
public MySQLiteHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
cont = context;
SQLiteDatabase db = this.getReadableDatabase();
Toast.makeText(cont, "constructor called", Toast.LENGTH_LONG).show();
}
Change the constructor code, then it will work...
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.