2014-12-22 2 views
2

У меня есть массив строк, которые необходимо проверить, если они есть в таблице, прежде чем вставлять их во избежание дублирования. Что такое SQL-запрос и как я могу заменить следующие значения? :)Android Sqlite: проверьте, существует ли строка в таблице

ArrayList<Product> NewProducts= new ArrayList<Product>(); 

Моя Модель продукта:

public class Product { 
    public Product() 
    { 

    } 

    public String PID = "pid"; 
    public String getPID() { 
     return PID; 
    } 
    public void setPID(String pID) { 
     PID = pID; 
    } 
    public String getNAME() { 
     return NAME; 
    } 
    public void setNAME(String nAME) { 
     NAME = nAME; 
    } 

    public String PID = "pid"; 
    public String NAME = "name"; 
} 

Имя таблицы: product_pics

Имя базы данных: product_db

Я понимаю, что это заявление будет работать:

"SELECT * FROM ' + product_pics + ' WHERE PID=' + pid +'" 

Как правильно форматировать это так, чтобы метод возвращался, если продукт существует или нет?

+0

Возможный дубликат [ Android sqlite, как проверить, существует ли запись] (https://stackoverflow.com/questions/20415309/android-sqlite-how-to-check-if-a-record-exists) –

ответ

10

Вобще как

Cursor cursor = null; 
String sql ="SELECT PID FROM "+TableName+" WHERE PID="+pidValue; 
cursor= db.rawQuery(sql,null); 
Log("Cursor Count : " + cursor.getCount()); 

if(cursor.getCount()>0){ 
    //PID Found 
}else{ 
//PID Not Found 
} 
cursor.close(); 
+1

не забывайте cursor.close () –

+0

@AlexiAkl ohh да спасибо за напомнить мне. –

2

Используйте Select EXIST ограничить только результат 1 или 0 и LIMIT 1 сделать запрос выполняется быстрее:

fun exists(): Boolean { 
    var sql = "SELECT EXISTS (SELECT * FROM $tableName WHERE $someColumn 
     = $someValue LIMIT 1)" 
    val cursor = db?.rawQuery(sql, null) 
    cursor?.moveToFirst() 
    return if (cursor?.getInt(0) == 1) { 
     cursor?.close() 
     true 
    } else { 
     cursor?.close() 
     false 
    } 

}