2013-03-05 81 views
0

我插入表,數據插入數據時會創建DB數據第一次被插入成功,但是當應用程序被關閉並重新啓動它給我的錯誤:sqlite的錯誤表

Error inserting id=1 new=1 title=sample page previous=0 color=0 next=2 state=1 header= ""; 
android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed 
at android.database.sqlite.SQLiteStatement.native_execute(Native Method) 
at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61) 
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1582) 
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426) 
at com.testjsonparse.MainActivity.parseAndIsertData(MainActivity.java:108) 
at java.lang.reflect.Method.invokeNative(Native Method) 

這是我用我的MainActivity.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);  

    dataSource = new ContentsDataSource(this); 
    dataSource.open(); 
    parseAndIsertData(); 

} 


@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    dataSource.open(); 

} 

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    Log.i(MY_TAGT, "OnPuse() called");  
    dataSource.close(); 
} 
private void parseAndIsertData() { 
    // Creating JSON Parser instance 
    MyJSONParser jParser = new MyJSONParser(); 

    contentDataObject = new ContentDataObject();   
    // getting JSON string from URL 
    JSONObject json = jParser.getJSONFromUrl(BASE_URL); 

    try { 
     // Getting Array of Contents 
     jsonArray = json.getJSONArray(MOBILE_CONTENT);   
     // looping through All Contents 
     for(int i = 0; i < jsonArray.length(); i++){ 

      contentDataObject.setId(jsonArray.getJSONObject(i).getInt(MOBILE_CONTENT_ID)); 
      contentDataObject.setTitle(jsonArray.getJSONObject(i).getString(MOBILE_CONTENT_TITLE)); 
      contentDataObject.setFulltext(jsonArray.getJSONObject(i).getString(MOBILE_CONTENT_FULLTEXT)); 
      contentDataObject.setState(jsonArray.getJSONObject(i).getInt(MOBILE_CONTENT_STATE)); 
      contentDataObject.setNewValue(jsonArray.getJSONObject(i).getInt(MOBILE_CONTENT_NEW)); 
      contentDataObject.setHeader(jsonArray.getJSONObject(i).getString(MOBILE_CONTENT_HEADER)); 
      contentDataObject.setColor(jsonArray.getJSONObject(i).getInt(MOBILE_CONTENT_COLOR)); 
      contentDataObject.setNext(jsonArray.getJSONObject(i).getString(MOBILE_CONTENT_NEXT)); 
      contentDataObject.setPrevious(jsonArray.getJSONObject(i).getString(MOBILE_CONTENT_PREVIOUS)); 

      contentDataObject = dataSource.create(contentDataObject); 

      Log.i(MY_TAGT, "Data Inserted " + contentDataObject.getId() + " Times"); 

     }   

     //textView.setText(builder); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

EDIT代碼的代碼,將數據插入到db是:

// Insert into Database 

    public ContentDataObject create(ContentDataObject dataObject) { 
     // Content class 
     ContentValues values = new ContentValues(); 

     values.put(DBHelper.MOBILE_CONTENT_ID, dataObject.getId()); 
     values.put(DBHelper.MOBILE_CONTENT_TITLE, dataObject.getTitle()); 
     values.put(DBHelper.MOBILE_CONTENT_FULLTEXT, dataObject.getFulltext()); 
     values.put(DBHelper.MOBILE_CONTENT_STATE, dataObject.getState()); 
     values.put(DBHelper.MOBILE_CONTENT_NEW, dataObject.getNewValue()); 
     values.put(DBHelper.MOBILE_CONTENT_HEADER, dataObject.getHeader()); 
     values.put(DBHelper.MOBILE_CONTENT_COLOR, dataObject.getColor()); 
     values.put(DBHelper.MOBILE_CONTENT_NEXT, dataObject.getNext()); 
     values.put(DBHelper.MOBILE_CONTENT_PREVIOUS, dataObject.getPrevious()); 

     long insetId = database.insert(DBHelper.MOBILE_CONTENT_TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_IGNORE);// Here it gives me error for SQLiteDatabase.CONFLICT_IGNORE 
     dataObject.setId(insetId); 
     return dataObject; 

    } 

EDIT創建表的查詢是:

private static final String MOBILE_CONTENT_DB_CREATE = "CREATE TABLE " 
     + MOBILE_CONTENT_TABLE_NAME + "(" + MOBILE_CONTENT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     MOBILE_CONTENT_TITLE + " TEXT, " + 
     MOBILE_CONTENT_FULLTEXT + " TEXT , " + 
     MOBILE_CONTENT_STATE + " INTEGER , " + 
     MOBILE_CONTENT_NEW + " INTEGER, " + 
     MOBILE_CONTENT_HEADER + " TEXT , " + 
     MOBILE_CONTENT_COLOR + " INTEGER , " + 
     MOBILE_CONTENT_NEXT + " TEXT , " + 
     MOBILE_CONTENT_PREVIOUS + " TEXT);"; 

現在我找不到爲什麼發生這個錯誤。謝謝

+0

full stacktrace請求! – SudoRahul 2013-03-05 06:04:15

+0

看看這個鏈接http://stackoverflow.com/questions/8117685/android-database-sqlite-sqliteconstraintexception-error-code-19-constraint-fai – itsrajesh4uguys 2013-03-05 06:14:54

+1

閱讀本太http://stackoverflow.com/questions/ 7567362/Android的數據庫SQLite的-sqliteconstraintexception-錯誤碼19約束輝這也太http://stackoverflow.com/questions/4499201/sqliteconstraintexception-error-code-19-constraint-failed – itsrajesh4uguys 2013-03-05 06:15:20

回答

1

你得到這個錯誤,因爲你的表中有場MOBILE_CONTENT_ID有主鍵,是汽車incremented.and你改變主要key.you有2個選項 1.刪除主鍵的那場 2.請不要插入在自動遞增字段中的值。

+0

好吧,我同意你的看法,那也行! :-) – 2013-03-05 06:48:46

3

在你的表創建「MOBILE_CONTENT_ID」是INTEGER PRIMARY KEY AUTOINCREMENT,所以在插入查詢不要把值「MOBILE_CONTENT_ID」。

+0

謝謝你!這有用,我非常感謝你。 – 2013-03-05 06:49:59

+0

:)歡迎來到好的 – 2013-03-05 07:01:59