2014-08-29 2 views
1

У меня возникла проблема с добавлением подкатегорий, я хочу, например, как описано в приведенной ниже таблице, написать метод в android, который принимает родительский идентификатор, который является идентификатором Animal и помещает это в столбце parentid doggie.Ошибка при попытке обновить базу данных в android sqlite

| id | parentid | name | 
----------------------------------------- 
| 1 | null  | animal | 
| 2 | null  |vegetable | 
| 3 | 1   | doggie | 
| 4 | 2   | carrot | 
|  |    |   | 
|  |    |   | 

это мой запрос, чтобы создать таблицу в андроида:

private static final String CREATE_TABLE_CATEGORIES="CREATE TABLE "+TABLE_CATEGORIES+"(id INTEGER PRIMARY KEY AUTOINCREMENT,"+category_name+ 
      " TEXT,parentid INTEGER null,foreign key (parentid) references "+TABLE_CATEGORIES+" (id));"; 

затем:

public void onCreate(SQLiteDatabase db){ 
     //Creation required tables 


     db.execSQL(CREATE_TABLE_CATEGORIES); 

    } 

........... .... ....... ...........

public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ 
     // on upgrade drop older tables 
     db.execSQL("PRAGMA foreign_keys = ON;"); 
     db.execSQL("DROP TABLE IF EXISTS " + CREATE_TABLE_CATEGORIES); 
     // create new table 
     onCreate(db); 
    } 

Теперь я хочу связать дочернюю категорию с родительской категорией, используя обновление.

public void AddSubCategory(Categories parent,Categories child){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(String.valueOf(child.getParentid()),parent.getId()); 
     db.update(TABLE_CATEGORIES,values,KEY_ID + " = ?",new String[] {String.valueOf(child.getId())}); 


    } 

Ошибка:

at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.database.sqlite.SQLiteException: near "0": syntax error (code 1): , while compiling: UPDATE Categories SET 0=? WHERE id = ? 
      at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 

ответ

1

Первый аргумент ContentValuesput() должно быть имя столбца, такие как "parentid" и не число таких, как 0 возвращенный child.getParentid().

+0

Но как насчет метода String.valueof(), он не возвращает строку? – TheGreenGoblen

+0

Есть ли способ преобразования возвращенного int getParentid() в String? – TheGreenGoblen

+0

Да, это 'String', но строка не представляет собой имя столбца. – laalto

0

Ваше заявление обновление должно быть:

values.put ("ParentId", parent.getId()); db.update (TABLE_CATEGORIES, values, KEY_ID + "=?", New String [{String.valueOf (child.getId())});

+0

Да, спасибо, что я сделал, но есть метод, который получает родительский объект, вместо того, чтобы писать «parentid». – TheGreenGoblen

+0

. Я не уверен, что полностью понял ваш вопрос. «parentid» - это имя столбца. Если вы хотите получить родительский объект объекта, вам нужно будет запросить свою базу данных. Затем вы можете сделать что-то вроде cursor.getColumnName (int columnIndex) – krshmbb