My question is related to this one. Or, I can say that, it's duplicate. Since some answers hardly looks correct to me (but doesn't work).
I created a database with SQLiteOpenHelper. Now I have to create three tables. I am working in only two right now. So not get into third one though second one solves third ones problem also.
I created two page for both tables.
public class SqliteExpense extends SQLiteOpenHelper {
private static final String TABLE="expense";
public SqliteExpense(@Nullable Context context) {
super(context, Constants.DB_NAME, null, Constants.DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String query,query_1;
query="CREATE TABLE "+TABLE+" ("+Constants.id+" INTEGER PRIMARY KEY,"+Constants.productName+" TEXT, "+Constants.productPrice+" TEXT,"+Constants.productVersion+" TEXT," +
Constants.productPurchaseDate+" TEXT,"+Constants.productPurchaseTime+" TEXT,"+Constants.productSerial+" TEXT,"+Constants.quantityOfProduct+" TEXT)";
sqLiteDatabase.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "+TABLE);
onCreate(sqLiteDatabase);
}
public class SqliteEmployee extends SQLiteOpenHelper {
private static final String TABLE="employee";
public SqliteEmployee(@Nullable Context context) {
super(context, Constants.DB_NAME, null, Constants.DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String query,query_1;
query="CREATE TABLE "+TABLE+" ("+Constants.id+" INTEGER PRIMARY KEY,"+Constants.firstName+" TEXT, "+Constants.lastName+" TEXT,"+Constants.address+" TEXT," +
Constants.contactNumber+" INTEGER,"+Constants.jobStatus+" TEXT,"+Constants.monthlyIncome+" INTEGER)";
sqLiteDatabase.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "+TABLE);
onCreate(sqLiteDatabase);
}
Here's the both page. I created SqliteEmployee at first then SqliteExpense. If I insert data following way :
SQLiteDatabase db=getWritableDatabase();
ContentValues values=new ContentValues();
values.put(Constants.firstName,firstName);
values.put(Constants.lastName,lastName);
values.put(Constants.contactNumber,contactNumber);
values.put(Constants.address,address);
values.put(Constants.jobStatus,jobStatus);
values.put(Constants.monthlyIncome,monthlyIncome);
long check=db.insert(TABLE,null,values);
if (check==-1) //check returns -1 as data don't insert
{
return false;
}
else
{
return true;
}
then it works correctly for SqliteEmployee. But when I do the same for SqliteExpense (I change variables) then it doesn't work. I get an error which says table doesn't exists
no such table: expense (code 1 SQLITE_ERROR): , while compiling: INSERT INTO expense(product_version,quantity_of_product,product_purchase_date,product_purchase_time,product_serial,product_name.........
As said in the answer, to pack both tables into one SQLiteHelper. I tried doing that but it couldn't create anymore table.
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String query,query_1;
query="CREATE TABLE "+TABLE+" ("+Constants.id+" INTEGER PRIMARY KEY,"+Constants.firstName+" TEXT, "+Constants.lastName+" TEXT,"+Constants.address+" TEXT," +
Constants.contactNumber+" INTEGER,"+Constants.jobStatus+" TEXT,"+Constants.monthlyIncome+" INTEGER)";
query_1="CREATE TABLE "+TABLE_EXPENSE+" ("+Constants.id+" INTEGER PRIMARY KEY,"+Constants.productName+" TEXT, "+Constants.productPrice+" TEXT,"+Constants.productVersion+" TEXT," +
Constants.productPurchaseDate+" TEXT,"+Constants.productPurchaseTime+" TEXT,"+Constants.productSerial+" TEXT,"+Constants.quantityOfProduct+" TEXT)";
sqLiteDatabase.execSQL(query);
sqLiteDatabase.execSQL(query_1);
}
I tried the code in both page. Still didn't work.