2012-03-11 64 views
3

我想添加一个新的项目(奶酪)到一个SQLite表,但只有在它不存在的情况下。我只有两列:_id(KEY_ROWID_PR)和product_name(KEY_NAME_PR)。Android sqlite插入记录,如果不存在

我一直在试图与这些代码,但它给我一个错误:

public void populate_base_lists2(String tablename, String item) { 
     ourDatabase.execSQL("INSERT INTO " + tablename + " (" + KEY_NAME_PR + ") SELECT * FROM (SELECT " + item + ") WHERE NOT EXISTS (SELECT " + KEY_NAME_PR + " FROM " + tablename + " WHERE " + KEY_NAME_PR + " = " + item + ") LIMIT 1;"); 
} 

03-11 17:27:20.972: E/AndroidRuntime(658): Caused by: android.database.sqlite.SQLiteException: no such column: Cheese: INSERT INTO PR_Dairy_Products (product_name) SELECT * FROM (SELECT Cheese) WHERE NOT EXISTS (SELECT product_name FROM PR_Dairy_Products WHERE product_name = Cheese) LIMIT 1;

的代码是从这里:MySQL: Insert record if not exists in table

没有这样的列:奶酪,好吧,我将该部分更改为KEY_NAME_PR,则错误相同,但没有此列:product_name。该专栏肯定存在。

更重要的是,我需要对此代码进行一些解释。我在一定程度上拥有SQL知识,但我无法得到这个。

感谢

回答

2

我想你可能需要围绕可变项目单引号,只要它出现,因为它的值不是列名。 试试这个代码:

public void populate_base_lists2(String tablename, String item) { 
ourDatabase.execSQL("INSERT INTO " + tablename + 
" (" + KEY_NAME_PR + ") SELECT * FROM (SELECT '" + item + "') 
WHERE NOT EXISTS (
SELECT " + KEY_NAME_PR + 
" FROM " + tablename + " WHERE " + KEY_NAME_PR + " = '" + item + "' 
) LIMIT 1;"); 
} 

希望有帮助。

+0

谢谢你,我真的很感激!我很亲密:) – erdomester 2012-03-11 17:35:44

相关问题