2014-12-21 4 views
0

Sqlite 데이터베이스의 테이블에 데이터를 추가 할 때이 오류가 발생합니다.Sqlite 'no such table'데이터베이스에 값을 삽입하는 중 오류가 발생했습니다.

12-21 17:31:19.345: E/SQLiteLog(24127): (1) no such table: accessory_data 
    12-21 17:31:19.345: E/DB ERROR(24127): android.database.sqlite.SQLiteException: 
no such table: accessory_data (code 1): , 
while compiling: SELECT aid, name, image, url, price 
FROM accessory_data 

데이터베이스는 다른 테이블에 데이터를 추가하기 위해 이전에 다른 방법으로 생성되었습니다. 여기서 내가하는 일은 단순히 동일한 데이터베이스의 다른 테이블에 데이터를 추가하는 것입니다. 그게 문제의 뿌리인가?

DBOperations 등급 :

public class DBOps extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 

    private static final String DATABASE_NAME = "jezzadb"; 


    public String CREATE_ACC_QUERY = "CREATE TABLE " + AccessoriesTableInfo.TABLE_NAME + " (" + AccessoriesTableInfo.AID + " VARCHAR, " + 
      AccessoriesTableInfo.NAME + " VARCHAR, " + AccessoriesTableInfo.IMAGE + " VARCHAR, " + AccessoriesTableInfo.PRICE + " VARCHAR, " + 
      AccessoriesTableInfo.URL + " VARCHAR);"; 

    public DBOps(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(CREATE_ACC_QUERY); 
    } 


public void insertAccessories(DBOps dop, Accessories a) 
    { 
     SQLiteDatabase SQ = dop.getWritableDatabase(); 
     ContentValues cv = new ContentValues(); 
     cv.put(AccessoriesTableInfo.AID, a.ID); 
     cv.put(AccessoriesTableInfo.NAME, a.Name); 
     cv.put(AccessoriesTableInfo.URL, a.URL); 
     cv.put(AccessoriesTableInfo.IMAGE, a.Image); 
     cv.put(AccessoriesTableInfo.PRICE, a.PRICE); 
     SQ.insert(AccessoriesTableInfo.TABLE_NAME, null, cv); 
     Log.d("Database Operations", "Inserted Accessories succesfully!"); 
    } 


    public ArrayList<Accessories> getAccessories(DBOps dop) 
    { 
     ArrayList<Accessories> arr = new ArrayList<Accessories>(); 

     SQLiteDatabase SQ = dop.getReadableDatabase(); 
     String[] columns = {AccessoriesTableInfo.AID,AccessoriesTableInfo.NAME,AccessoriesTableInfo.IMAGE,AccessoriesTableInfo.URL, 
       AccessoriesTableInfo.PRICE}; 
     Cursor CR = SQ.query(AccessoriesTableInfo.TABLE_NAME, columns, null, null, null, null, null); 
     CR.moveToFirst(); 

     for(int i=0;i<CR.getCount();i++) 
     { 
      while (!CR.isAfterLast()) { 
       Accessories a= new Accessories(); 
       a.ID = CR.getString(0); 
       a.Name = CR.getString(1); 
       a.URL = CR.getString(2); 
       a.Image = CR.getString(3); 
       a.PRICE = CR.getString(4); 

       arr.add(a); 
       CR.moveToNext(); 
      } 
      CR.close(); 
      break; 
     } 
return arr; 
    } 

AccessoriesTableInfo 클래스 : 내가 잘못

public class AccessoriesTableData { 

    public AccessoriesTableData() 
    { 

    } 
    public static abstract class AccessoriesTableInfo implements BaseColumns 
    { 
     public static final String AID = "aid"; 
     public static final String NAME = "name"; 
     public static final String IMAGE = "image"; 
     public static final String URL = "url"; 
     public static final String PRICE = "price"; 
     public static final String TABLE_NAME = "accessory_data"; 
    } 
} 

을 뭐하는 거지?

답변

1

데이터베이스는 다른 테이블에 데이터를 추가하기 위해 다른 방법으로 이전에 만들어졌습니다. 여기서 내가하는 일은 단순히 동일한 데이터베이스의 다른 테이블에 데이터를 추가하는 것입니다. 그게 문제의 뿌리인가?

네, 그게 문제입니다. 데이터베이스 파일 당 하나의 SQLiteOpenHelper 하위 클래스 만 사용하십시오.

요청 된 버전 1의 데이터베이스 파일이 이미 존재하므로 onCreate() 또는 onUpgrade()과 같은 데이터베이스 도우미 라이프 사이클 콜백이 호출되지 않습니다.

추가 읽기 : When is SQLiteOpenHelper onCreate()/onUpgrade() run?

+0

아 내가 볼 ..하지만 기존 테이블을 삭제하는 데하거나 데이터베이스를 삭제하지 않고 새로운 테이블과 새로운 값을 추가하는 방법이 있나요? onUpgrade() 메소드입니까? – Pjayness

+0

'private static final int DATABASE_VERSION = 1;을'private static final int DATABASE_VERSION = 2;로 변경하십시오. 이렇게하면 onUpgrade()가 호출됩니다. –

관련 문제