2013-02-27 89 views
1

我想插入現有應用程序數據表的應用程序的類別。我不知道我是否做得正確,但是我在做什麼,我也得到了這個錯誤。android sqlite插入到哪裏

我該如何正確地做到這一點?

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

處理器

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得到的值作爲「遊戲」,但它並沒有得到更新

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 2013-02-27 13:50:32

回答

4

的INSERT命令創建

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 + "%" }); 

    } 

表沒有一個WHERE子句,因爲它插入一個全新的紀錄。

看起來您想設置/更改現有記錄中的值。 這與UPDATE命令來完成:

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

不能使用INSERT INTO然後用WHERE條款。

INSERT INTO意味着你正在表中添加一個新行,這在之前不存在。 您可以在UPDATE和SELECT語句上使用WHERE,但不能在INSERT INTO上使用WHERE。

我猜你的意思是更新而不是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 2013-02-27 14:06:04

+0

但是這並沒有把數據加到我的數據庫中 – Romi 2013-02-27 15:20:24

+0

它不會添加if該行還不存在,UPDATE語句的作用是更新現有記錄(如果有的話)。請參閱我更新的INSERT INTO代碼的答案。 – lorraine 2013-02-28 12:45:50

0

您不能在INSERT INTO中使用WHERE。如果使用INSERT將添加一個新行。如果你需要更新行,其中KEY_NAME LIKE「%AppName%」使用UPADATE