user3426056 user3426056 - 2 months ago 10
Android Question

Creating Multiple table in sqlite

I want to create two tables in my SQLite database. One table (exptable) gets created, but the second table (inctable) gives me an error of no such table.

Here is my datahandler code:

package com.example.pocketmanager;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DataHandler {
public static final String DATE= "date";
public static final String EAMT ="eamt";
public static final String EPAYEE= "epayee";
public static final String ECATEGORY ="ecategory";
public static final String TABLE_NAME= "exptable";

public static final String IDATE= "idate";
public static final String IAMT ="iamt";
public static final String IPAYEE= "ipayee";
public static final String ICATEGORY ="icategory";
public static final String TABLE_NAME1= "inctable";

public static final String DATA_BASE_NAME = "expdatabase";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_CREATE ="create table exptable (date text not null, eamt string not null, epayee text not null, ecategory text not null)";
public static final String TABLE_CREATE1 ="create table inctable (idate text not null, iamt string not null, ipayee text not null, icategory text not null)";
DataBaseHelper dbhelper;
Context ctx;
SQLiteDatabase db;

public DataHandler(Context ctx)
{
this.ctx= ctx;
dbhelper = new DataBaseHelper (ctx);
}

private static class DataBaseHelper extends SQLiteOpenHelper
{
public DataBaseHelper (Context ctx)
{
super(ctx, DATA_BASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
try{
db.execSQL(TABLE_CREATE);
db.execSQL(TABLE_CREATE1);
}
catch(SQLException e)
{
e.printStackTrace();
}
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS exptable");
db.execSQL("DROP TABLE IF EXISTS inctable");
onCreate(db);
}
}

public DataHandler open()
{
db = dbhelper.getWritableDatabase();
return this;
}

public void close()
{
dbhelper.close();
}

public long insertData(String date, String eamt, String epayee, String ecategory)
{
ContentValues content = new ContentValues();
content.put(DATE, date);
content.put(EAMT, eamt);
content.put(EPAYEE, epayee);
content.put(ECATEGORY, ecategory);
return db.insertOrThrow(TABLE_NAME, null, content);
}

public Cursor returnData()
{
return db.query(TABLE_NAME, new String[] {DATE, EAMT, EPAYEE, ECATEGORY},null,null, null, null, null);
}

public long insertData1(String idate, String iamt, String ipayee, String icategory)
{
ContentValues content1 = new ContentValues();
content1.put(IDATE, idate);
content1.put(IAMT, iamt);
content1.put(IPAYEE, ipayee);
content1.put(ICATEGORY, icategory);
return db.insertOrThrow(TABLE_NAME1, null, content1);
}

public Cursor returnData1()
{
return db.query(TABLE_NAME1, new String[] {IDATE, IAMT, IPAYEE, ICATEGORY},null,null, null, null, null);
}
}


Here is my Log cat:

05-20 07:09:29.097: E/SQLiteLog(1545): (1) no such table: inctable
05-20 07:09:29.097: D/AndroidRuntime(1545): Shutting down VM
05-20 07:09:29.097: W/dalvikvm(1545): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
05-20 07:09:29.137: E/AndroidRuntime(1545): FATAL EXCEPTION: main
05-20 07:09:29.137: E/AndroidRuntime(1545): android.database.sqlite.SQLiteException: no such table: inctable (code 1): , while compiling: INSERT INTO inctable(iamt,idate,icategory,ipayee) VALUES (?,?,?,?)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.database.sqlite.SQLiteDatabase.insertOrThrow(SQLiteDatabase.java:1365)
05-20 07:09:29.137: E/AndroidRuntime(1545): at com.example.pocketmanager.DataHandler.insertData1(DataHandler.java:107)
05-20 07:09:29.137: E/AndroidRuntime(1545): at com.example.pocketmanager.Income$2.onClick(Income.java:72)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.view.View.performClick(View.java:4204)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.view.View$PerformClick.run(View.java:17355)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.os.Handler.handleCallback(Handler.java:725)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.os.Handler.dispatchMessage(Handler.java:92)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.os.Looper.loop(Looper.java:137)
05-20 07:09:29.137: E/AndroidRuntime(1545): at android.app.ActivityThread.main(ActivityThread.java:5041)
05-20 07:09:29.137: E/AndroidRuntime(1545): at java.lang.reflect.Method.invokeNative(Native Method)
05-20 07:09:29.137: E/AndroidRuntime(1545): at java.lang.reflect.Method.invoke(Method.java:511)
05-20 07:09:29.137: E/AndroidRuntime(1545): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-20 07:09:29.137: E/AndroidRuntime(1545): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-20 07:09:29.137: E/AndroidRuntime(1545): at dalvik.system.NativeStart.main(Native Method)

Answer

First, remove try-catch from the helper onCreate(). If there's a problem, don't suppress it.

Second, uninstall your app so your old database file gets removed. See When is SQLiteOpenHelper onCreate() / onUpgrade() run?