2013-02-27 4 views
1

Я хочу вставить категорию приложения существующей таблицы данных приложения. Я не знаю, если я делаю это правильно, но в том, что я делаю, я тоже получаю эту ошибку.android sqlite insert in where

Как я должен делать это правильно?

Mainactivity

AlertDialog.Builder builder = new AlertDialog.Builder(
      MainActivity.this); 
    builder.setTitle("Please Select Category of : " + AppName); 
    builder.setItems(shareItems, 
      new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int item) { 
        // TODO Auto-generated method stub 
        String itemz = String.valueOf(shareItems[item]); 
        mySQLiteAdapter.insertcategory(AppName, itemz); 
       } 
      }); 
    AlertDialog shareAlert = builder.create(); 
    shareAlert.show(); 

Handler

public long insertcategory(String AppName, String itemz) { 
      // TODO Auto-generated method stub 
      Cursor crack = sqlitedb.rawQuery("INSERT INTO " + KEY_CATEGORY 
        + " VALUES (' " + itemz + " ') WHERE " + KEY_NAME 
        + " LIKE ?", new String[] { "%" + AppName+ "%" }); 
      return 0; 
     } 

обновленный запрос Это то, что я использовал, чтобы обновить таблицу. itemz получает значение как «игра», но это не получает обновленный

public long insertcategory(String AppName, String itemz) { 
     // TODO Auto-generated method stub 

     ContentValues values = new ContentValues(); 
     values.put(KEY_CATEGORY, itemz); 
     return sqlitedb.update(MYDATABASE_TABLE, values, KEY_NAME + " LIKE ?", 
       new String[] { "%" + AppName + "%" }); 

    } 

таблицу, созданные в

private static final String SCRIPT_CREATE_DATABASE = "create table " 
      + MYDATABASE_TABLE + " (" + KEY_ID 
      + " integer primary key autoincrement, " + KEY_NAME 
      + " text not null, " + KEY_PACK + " text not null, " + KEY_PERM 
      + " text not null, " + KEY_LEVEL + " text not null, " 
      + KEY_CATEGORY + " text);"; 
+0

Как вы можете видеть, в вашем SQL-запросе есть ошибка. В качестве первой помощи распечатайте сгенерированный SQL-запрос и выполните его непосредственно в SQLlite. хороший способ найти вашу ошибку в вашем реальном исходном коде. – reporter

ответ

4

Команда INSERT не имеет ИНЕК, потому что он вставляет совершенно новую запись.

Похоже, вы хотите установить/изменить значение в существующей записи. Это будет сделано с помощью команды UPDATE:

UPDATE MyTable SET category = 'Entertainment' WHERE name LIKE ? 
0

Вы не можете использовать INSERT INTO затем использовать WHERE пункт.

INSERT INTO означает, что вы добавляете новую строку в таблицу, которой раньше не было. Вы можете использовать WHERE на UPDATE и SELECT, но не на INSERT INTO.

Я предполагаю, что вы имеете в виду UPDATE вместо INSERT INTO:

Попробуйте это:

public long insertcategory(String AppName, String itemz) { 
      // TODO Auto-generated method stub 
      Cursor crack = sqlitedb.rawQuery("UPDATE " + KEY_CATEGORY 
        + " SET yourFieldNameHere = ' " + itemz + " ' WHERE " + KEY_NAME 
        + " LIKE ?", new String[] { "%" + AppName+ "%" }); 
      return 0; 
     } 

Для вставки, попробуйте следующее:

public long insertcategory(String AppName, String itemz) { 
       // TODO Auto-generated method stub 
       Cursor crack = sqlitedb.rawQuery("INSERT INTO " + KEY_CATEGORY 
         + " VALUES(' " + itemz + " ')" }); 
       return 0; 
      } 

Изменить yourFieldNameHere с именем вашего поле таблицы.

+0

эй, спасибо вам большое, и за знания я работал после чего-то ложного. – Romi

+0

Но это не добавляет данные в мою базу данных – Romi

+0

Это не добавит, если строка еще не существует. Оператор UPDATE делает это, чтобы обновить существующую запись, если она есть. См. мой обновленный ответ для кода INSERT INTO. – lorraine

0

Вы не можете использовать ГДЕ в INSERT INTO. Если использование INSERT добавит новую строку. Если вам нужна строка обновления, которая KEY_NAME LIKE «% AppName% use UPADATE