0

最初にデータが正常に挿入されたときにデータベースが作成されたときに、テーブルにデータを挿入していますが、アプリを閉じて再起動するとエラーが発生します:

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 );";

このエラーが発生する理由を見つけることができません。ありがとう

4

2 に答える 2

3

テーブルの作成では、「MOBILE_CONTENT_ID」はINTEGER PRIMARY KEY AUTOINCREMENTであるため、挿入クエリでは「MOBILE_CONTENT_ID」に値を入れないでください。

于 2013-03-05T06:45:29.740 に答える
1

テーブルにフィールドMOBILE_CONTENT_IDがあり、主キーがあり、自動インクリメントされているため、このエラーが発生しました.主キーを変更しています.2つのオプションがあります1.そのフィールドの主キーを削除します2.自動インクリメントフィールドに値を挿入しないでください.

于 2013-03-05T06:45:48.703 に答える