2015-05-19 2 views
-4

Мое приложение отлично работает, извлекая записи из базы данных 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)

+0

Вы создали таблицу базы данных? –

+0

sir в моем приложении, у меня есть две таблицы, одна из которых отображает список и другую таблицу, это моя первая таблица не дает мне никаких ошибок, но моя вторая таблица дает мне исключение sqlite –

ответ

1

У меня есть две таблицы, один для отображения ListView и другой таблицы это моя первая таблица разве дает мне какую-либо ошибку, но моя вторая таблица дает мне SQLite исключение

код, который вы размещены шоу создается только одна таблица.

Используйте только один файл SQLiteOpenHelper.dll в файле базы данных. Второй помощник только обнаруживает, что файл базы данных уже существует и имеет правильную версию, и поэтому обратные вызовы для жизненного цикла onCreate()/не требуют вызова.См. When is SQLiteOpenHelper onCreate()/onUpgrade() run?

Просто поместите SQL, который создает обе таблицы в одном onCreate() как два отдельных вызова execSQL().

Также подумайте над удалением любых catch блоков в вашем помощнике onCreate() и onUpgrade(). Проблемы с синтаксисом необходимо отправить.

Существует также пробельная проблема, которая приводит к «отсутствию такого столбца», обнаруженному M D в его удаленном ответе.

+0

Sir thanx alot, ваше объяснение действительно помогло мне, это сработало , спасибо за то, что выучили какое-то время, чтобы объяснить мне, что делать –

Смежные вопросы