Мое приложение отлично работает, извлекая записи из базы данных sqlite, но вдруг это не дает мне такой таблицы, исключение sqlite. Пожалуйста, помогите мне разобраться в проблеме.android.database.sqlite.SqlException: Нет такой таблицы (код 1)
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: Это класс, в котором я вставляя данные JSON в моей базе данных SQLite.
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: Е/SQLiteLog (3236): (1) нет такой таблицы: SingleTrackList 05-19 12:40: 38.016: E/SQLiteDatabase (3236): Ошибка вставки trackId = 879273565 trackName = Лучше 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 collectionЦена = 9.99 05-19 12: 40: 38.016: E/SQLiteDatabase (3236): android.database.sqlite.SQLiteException: нет такой таблицы: SingleTrackList (код 1): при компиляции: I NSERT 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 (собственный метод) 05-19 12: 40: 38.016: E/SQLiteDatabase (3236): на 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): в android.database.sqlite.SQLiteSession.prepare (SQLiteSession.java:588) 05-19 12: 40: 38.016: E/SQLiteDatabase (3236): в android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:58) 05-19 12: 40: 38.016: E/SQLiteDatabase (3236): при droid.database.sqlite.SQLiteStatement. (SQLiteStatement.java:31) 05-19 12: 40: 38.016: E/SQLiteDatabase (3236): на 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): в 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): в 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) нет такой таблицы: SingleTrackList 05-19 12: 40: 38.021: W/dalvikvm (3236): threadid = 1: поток, выходящий с неперехваченным исключением (gro up = 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: нет такой таблицы: SingleTrackList (код 1): при компиляции: 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 (собственный метод) 05-19 12: 40: 38.036: E/AndroidRuntime (3236): на 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.SQ LiteProgram. (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): в 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): на android.os.Handler.dispatchMessage (Handler.java:99) 05-19 12: 40: 38.036: E/AndroidRuntime (3236): на 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 (родной метод) 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 Metho d)
Вы создали таблицу базы данных? –
sir в моем приложении, у меня есть две таблицы, одна из которых отображает список и другую таблицу, это моя первая таблица не дает мне никаких ошибок, но моя вторая таблица дает мне исключение sqlite –