2011-11-17 4 views
1

Je rencontre des problèmes lors de la recherche d'une base de données SQLite dans mon application Android. J'utilise l'interface de recherche pour passer la variable de recherche (searchActivity.query) à ceci:Rechercher dans la base de données SQLite dans Android

//searchActivity.query obtained from: 
    //String query = searchActivity.getStringExtra(SearchManager.QUERY); 

    String searchString = "'" + searchActivity.query + "%'"; 

    //sqlitedb is called via: private SQLiteDatabase sqlitedb; 

    Cursor cursor = sqlitedb.query(DATABASE_TABLE, new String[] 
    {"id", "FirstName","LastName"}, 
    "FirstName LIKE " + searchString, null, null, null, null); 

    int index_CONTENT = cursor.getColumnIndex(FirstName); 

    for(cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()){ 
     result = result + cursor.getString(index_CONTENT) + "\n"; 
    } 

Le problème est que l'utilisation de la « LIKE » sorties déclaration tout dans la base de données - en battant le but d'utiliser l'interface de recherche. Je ne sais pas trop où je vais mal.

J'ai essayé de remplacer LIKE par "=", sauf que rien n'a été affiché, même si j'étais sûr à 100% que l'enregistrement existait.

Toute aide serait grandement appréciée!

Merci à l'avance,

Joe

MISE À JOUR: Désolé pour le titre trompeur. Je ne passais pas la requête de recherche correctement.

Répondre

0

Essayez ceci,

Cursor cursor = sqlitedb.query(DATABASE_TABLE, new String[] 
    {"id", "FirstName","LastName"}, 
    "FirstName LIKE '"+searchActivity.query+"%'", null, null, null, null); 

et laissez-moi savoir ce qui se passe ..

+0

Merci d'avoir répondu. Il affiche toujours tout dans la base de données. – Jamie

+0

searchActivity.query est la suivante: String query = searchActivity.getStringExtra (SearchManager.QUERY); J'ai un enregistrement nommé 'b' dans la base de données. Quand je l'ai fait "LIKE 'b%" "cela a fonctionné (il a seulement affiché cet enregistrement). Cependant, il sort toujours tout autrement .. – Jamie

+2

juste déboguer et voir quelle est la valeur searchActivity.query ont quand la requête a tiré parce que je pense que vous n'avez rien dans ce qui est pourquoi. – user370305

0

Vous devez lier le paramètre.

query = "UPPER(" + COLUMNNAME + ") like ?"; 
String searchString = searchActivity.query + "%"; 

puis,

sqlitedb.query(DATABASE_TABLE, new String[] 
{"id", "FirstName","LastName"}, 
query , new String[] {searchString},....); 
2
String sql = " SELECT * FROM Table WHERE xColumn LIKE '%"+textView1.getText().toString()+"%'"; 
cursor = db.rawQuery(sql, null); 

vous pouvez utiliser comme ci-dessus

+0

Oui, mais vous ne devriez jamais vider l'entrée de texte directement à la requête. Utilisez plutôt un paramètre pour sécuriser l'instruction sql. –

2
Cursor c = sqLiteDatabase.query(SQLiteHelper.MYDATABASE_TABLE, null, null, null, null, null, SQLiteHelper.KEY_CONTENT1 +" ASC"); 
+0

bon travail Nik !!! –

Questions connexes