My App was working perfectly by fetching records from sqlite database , but suddenly it is giving me no such table , sqlite exception. Please help me figure it out the problem.
SqliteListHelper2.java
public class SqliteDatabaseHelper2 {
DbListHelper2 helper2;
public SqliteDatabaseHelper2(Context context) {
helper2 = new DbListHelper2(context);
}
public SqliteDatabaseHelper2 open(Context context) throws SQLException {
helper2 = new DbListHelper2(context);
SQLiteDatabase db2 = helper2.getWritableDatabase();
return this;
}
public void close() {
if (helper2 != null) {
helper2.close();
}
}
public long insertData2(String artworkImage, String wrapperType, String
artistName, String collectionName,
String trackName, String collectionPrice, String trackId) {
SQLiteDatabase db2 = helper2.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DbListHelper2.ARTWORK_IMAGE, artworkImage);
values.put(DbListHelper2.WRAPPER_TYPE, wrapperType);
values.put(DbListHelper2.ARTIST_NAME, artistName);
values.put(DbListHelper2.COLLECTION_NAME, collectionName);
values.put(DbListHelper2.TRACK_NAME, trackName);
values.put(DbListHelper2.COLLECTION_PRICE, collectionPrice);
values.put(DbListHelper2.TRACK_ID, trackId);
long id2 = db2.insert(DbListHelper2.TABLE_NAME, null, values);
return id2;
}
public Cursor getAllData2() {
SQLiteDatabase db2 = helper2.getWritableDatabase();
String[] columns = { DbListHelper2.UID, DbListHelper2.ARTWORK_IMAGE,
DbListHelper2.WRAPPER_TYPE,
DbListHelper2.ARTIST_NAME, DbListHelper2.COLLECTION_NAME,
DbListHelper2.TRACK_NAME,
DbListHelper2.COLLECTION_PRICE, DbListHelper2.TRACK_ID };
Cursor cursor2 = db2.query(DbListHelper2.TABLE_NAME, columns, null,
null, null, null, null);
StringBuffer buffer = new StringBuffer();
while (cursor2.moveToNext()) {
int index = cursor2.getColumnIndex(DbListHelper2.UID);
int cid = cursor2.getInt(index);
int index0 =
cursor2.getColumnIndex(DbListHelper2.ARTWORK_IMAGE);
String cid0 = cursor2.getString(index0);
int index1 = cursor2.getColumnIndex(DbListHelper2.WRAPPER_TYPE);
String cid1 = cursor2.getString(index1);
int index2 = cursor2.getColumnIndex(DbListHelper2.ARTIST_NAME);
String cid2 = cursor2.getString(index2);
int index3 =
cursor2.getColumnIndex(DbListHelper2.COLLECTION_NAME);
String cid3 = cursor2.getString(index3);
int index4 = cursor2.getColumnIndex(DbListHelper2.TRACK_NAME);
String cid4 = cursor2.getString(index4);
int index5 =
cursor2.getColumnIndex(DbListHelper2.COLLECTION_PRICE);
String cid5 = cursor2.getString(index5);
int index6 = cursor2.getColumnIndex(DbListHelper2.TRACK_ID);
String cid6 = cursor2.getString(index6);
buffer.append(cid + " " + cid0 + " " + cid1 + " " + cid2 + " " +
cid3 + " " + cid4 + " " + cid5 + " "
+ cid6 + "\n");
}
return cursor2;
}
static class DbListHelper2 extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "Tracks";
private static final String TABLE_NAME = "SingleTrackList";
private static final int DATABASE_VERSION = 1;
private Context context;
static final String UID = "_id";
static final String ARTWORK_IMAGE = "artworkUrl100";
static final String WRAPPER_TYPE = "Wrapper_Type";
static final String ARTIST_NAME = "artistName";
static final String COLLECTION_NAME = "collectionName";
static final String TRACK_NAME = "trackName";
static final String COLLECTION_PRICE = "collectionPrice";
static final String TRACK_ID = "trackId";
private static final String CREATE_TABLE = "Create table "
+TABLE_NAME+" (" +UID
+" INTEGER PRIMARY KEY AUTOINCREMENT, "+ARTWORK_IMAGE+"
VARCHAR(500), "+WRAPPER_TYPE
+" VARCHAR(50), "+ARTIST_NAME+ " VARCHAR(500),
"+COLLECTION_NAME+" VARCHAR(500), "
+TRACK_NAME+" VARCHAR(500), "+COLLECTION_PRICE+"
VARCHAR(500), "+TRACK_ID
+" VARCHAR(255))";
private static final String DROP_TABLE = "Drop table If Exists "
+TABLE_NAME;
public DbListHelper2(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
Message.message(context, "Constructor called");
}
@Override
public void onCreate(SQLiteDatabase db2) {
try {
Message.message(context, "onCreate called");
db2.execSQL(CREATE_TABLE);
} catch (SQLException e) {
Message.message(context, "onCreate failed");
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db2, int oldVersion, int
newVersion) {
try {
Message.message(context, "onUpgrage called");
db2.execSQL(DROP_TABLE);
onCreate(db2);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
SingleTuneDetails.java : This is the class in which i am inserting json data into my sqlite database.
public class SingleTunesDetails extends Activity {
private SqliteDatabaseHelper2 listHelper2;
@Override
protected void onCreate(Bundle savedInstanceState) {
listHelper2 = new SqliteDatabaseHelper2(getBaseContext());
listHelper2.open(getBaseContext());
url = "https://itunes.apple.com/lookup?id=" + passedData7;
// Calling async task to get json
new GetSingleTrackDetails().execute();
}
class GetSingleTrackDetails extends AsyncTask<Void, Void, Void> {
private JSONObject jsonObj;
private Cursor cursor;
@Override
protected Void doInBackground(Void... params) {
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);
Log.d("Response: ", "> " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
tracks = jsonObj.getJSONArray(TAG_RESULT);
// looping through All Products
for (int i = 0; i < tracks.length(); i++) {
JSONObject c = tracks.getJSONObject(i);
artworkImage = c.getString("artworkUrl100");
wrapperType = c.getString("wrapperType");
artistName = c.getString("artistName");
collectionName = c.getString("collectionName");
trackName = c.getString("trackName");
collectionPrice = c.getString("collectionPrice");
trackId = c.getString("trackId");
// tmp hashmap for single contact
HashMap<String, String> tunesMap = new HashMap<String,
String>();
// adding each child node to HashMap key => value
// contact.put(TAG_ID, firstname);
tunesMap.put(TAG_ARTWORK_IMAGE, artworkImage);
tunesMap.put(TAG_WRAPPER_TYPE, wrapperType);
tunesMap.put(TAG_ARTIST_NAME, artistName);
tunesMap.put(TAG_COLLECTION_NAME, collectionName);
tunesMap.put(TAG_TRACK_NAME, trackName);
tunesMap.put(TAG_COLLECTION_PRICE, collectionPrice);
tunesMap.put(TAG_TRACK_ID, trackId);
// adding contact to contact list
singleTrackDetails.add(tunesMap);
long id = listHelper2.insertData2(artworkImage,
wrapperType, artistName, collectionName,
trackName, collectionPrice, trackId);
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (pDialog != null) {
pDialog.dismiss();
pDialog = null;
}
cursor = listHelper2.getAllData2();
if (cursor.moveToFirst()) {
do{
wrapperTypeText.setText(passedData2);
artistNameText.setText(passedData3);
collectionNameText.setText(passedData4);
trackNameText.setText(passedData5);
collectionPriceText.setText(passedData6);
}while(cursor.moveToNext());
}
cursor.close();
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
listHelper2.close();
}
}
Logcat :
05-19 12:40:37.996: E/SQLiteLog(3236): (1) no such table: SingleTrackList 05-19 12:40:38.016: E/SQLiteDatabase(3236): Error inserting trackId=879273565 trackName=Better Together Wrapper_Type=track artistName=Jack Johnson artworkUrl100=http://is4.mzstatic.com/image/pf/us/r30/Music4/v4/41/df/6f/41df6fb5-d08f-5573-fb4b-a56a9b6ea0cb/UMG_cvrart_00602537868858_01_RGB72_900x810_06UMGIM25847.100x100-75.jpg collectionName=In Between Dreams collectionPrice=9.99 05-19 12:40:38.016: E/SQLiteDatabase(3236): android.database.sqlite.SQLiteException: no such table: SingleTrackList (code 1): , while compiling: INSERT INTO SingleTrackList(trackId,trackName,Wrapper_Type,artistName,artworkUrl100,collectionName,collectionPrice) VALUES (?,?,?,?,?,?,?) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:909) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:520) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1523) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1395) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at com.example.fasoostest.SqliteDatabaseHelper2.insertData2(SqliteDatabaseHelper2.java:41) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at com.example.fasoostest.SingleTunesDetails$GetSingleTrackDetails.doInBackground(SingleTunesDetails.java:135) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at com.example.fasoostest.SingleTunesDetails$GetSingleTrackDetails.doInBackground(SingleTunesDetails.java:1) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at android.os.AsyncTask$2.call(AsyncTask.java:287) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 05-19 12:40:38.016: E/SQLiteDatabase(3236): at java.lang.Thread.run(Thread.java:864) 05-19 12:40:38.021: E/SQLiteLog(3236): (1) no such table: SingleTrackList 05-19 12:40:38.021: W/dalvikvm(3236): threadid=1: thread exiting with uncaught exception (group=0x40d47a08) 05-19 12:40:38.036: E/AndroidRuntime(3236): FATAL EXCEPTION: main 05-19 12:40:38.036: E/AndroidRuntime(3236): android.database.sqlite.SQLiteException: no such table: SingleTrackList (code 1): , while compiling: SELECT _id, artworkUrl100, Wrapper_Type, artistName, collectionName, trackName, collectionPrice, trackId FROM SingleTrackList 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:909) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:520) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:65) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1370) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1217) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1088) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1256) 05-19 12:40:38.036: E/AndroidRuntime(3236): at com.example.fasoostest.SqliteDatabaseHelper2.getAllData2(SqliteDatabaseHelper2.java:51) 05-19 12:40:38.036: E/AndroidRuntime(3236): at com.example.fasoostest.SingleTunesDetails$GetSingleTrackDetails.onPostExecute(SingleTunesDetails.java:154) 05-19 12:40:38.036: E/AndroidRuntime(3236): at com.example.fasoostest.SingleTunesDetails$GetSingleTrackDetails.onPostExecute(SingleTunesDetails.java:1) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.os.AsyncTask.finish(AsyncTask.java:631) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.os.AsyncTask.access$600(AsyncTask.java:177) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.os.Handler.dispatchMessage(Handler.java:99) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.os.Looper.loop(Looper.java:158) 05-19 12:40:38.036: E/AndroidRuntime(3236): at android.app.ActivityThread.main(ActivityThread.java:5751) 05-19 12:40:38.036: E/AndroidRuntime(3236): at java.lang.reflect.Method.invokeNative(Native Method) 05-19 12:40:38.036: E/AndroidRuntime(3236): at java.lang.reflect.Method.invoke(Method.java:511) 05-19 12:40:38.036: E/AndroidRuntime(3236): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1083) 05-19 12:40:38.036: E/AndroidRuntime(3236): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850) 05-19 12:40:38.036: E/AndroidRuntime(3236): at dalvik.system.NativeStart.main(Native Method)