2013-02-27 112 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