Android SQLite recherche par nom
J'ai pris un exemple de travail avec SQLite sous Android à partir d'ici: http://www.cnblogs.com/pangblog/p/3327696.html
Et je strugle avec l'obtention de contact par son nom. Comment puis-je changer GetContact fonction de recherche par nom?
DatabaseHandler:
public class DatabaseHandler extends SQLiteOpenHelper {
//Database Version
private static final int DATABASE_VERSION = 1;
//Database Name
private static final String DATABASE_NAME = "contactsManager";
//Contacts table name
private static final String TABLE_CONTACTS = "contacts";
//Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_PH_NUM = "phone_number";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables : CREATE TABLE table_name (column_name column_type);
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
+ KEY_PH_NUM + " TEXT" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
// Create tables again
onCreate(db);
}
//Adding new contact
void addContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.getName()); // Contact Name
values.put(KEY_PH_NUM, contact.getPhoneNumber()); // Contact Phone
// Inserting Row
db.insert(TABLE_CONTACTS, null, values);
db.close(); // Closing database connection
}
// Getting single contact
Contact getContact(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
KEY_NAME, KEY_PH_NUM }, KEY_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2));
return contact;
}
// Getting All Contacts
public List<Contact> getAllContacts() {
List<Contact> contactList = new ArrayList<Contact>();
// Select All Query :SELECT * FROM tableName WHERE criteria
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Contact contact = new Contact();
contact.setID(Integer.parseInt(cursor.getString(0)));
contact.setName(cursor.getString(1));
contact.setPhoneNumber(cursor.getString(2));
// Adding contact to list
contactList.add(contact);
} while (cursor.moveToNext());
}
return contactList;
}
}
Contact:
public class Contact {
int _id;
String _name;
String _phone_number;
public Contact() {
}
public Contact(int id, String name, String phone_number) {
this._id = id;
this._name = name;
this._phone_number = phone_number;
}
public Contact(String name, String phone_number) {
this._name = name;
this._phone_number = phone_number;
}
public int getID() {
return this._id;
}
public void setID(int id) {
this._id = id;
}
public String getName() {
return this._name;
}
public void setName(String name) {
this._name = name;
}
public String getPhoneNumber() {
return this._phone_number;
}
public void setPhoneNumber(String phone_number) {
this._phone_number = phone_number;
}
}
Quand vous dites "par le nom de" que faites-vous ? Vous de quoi passer le nom d'un contact pour la fonction et le trouver dans la table ?
OriginalL'auteur Dim | 2013-09-18
Vous devez vous connecter pour publier un commentaire.
La clause where dans la requête de base de données dans getContact est actuellement
id = ?
et la?
est remplacé par l'id de paramètre. Ce que vous devez faire une recherche par nom est de modifier la partie.Vous devez aussi changer le "travail" du code un peu puisque ce n'est pas vraiment sûr. Un curseur peut pas être
null
(dans la pratique), maiscursor.moveToFirst()
peut /va échouer si il n'y a pas de tel nom dans la base de données. Si elle échoue, vous aurez une exception àcursor.getString(0)
parce que le curseur n'a pas de ligne pour obtenir des données à partir d'.Baisse de la
null
vérifier et faire vérifier si le curseur peut être déplacé de la première position (n'est pas vide). Vous devez également fermer le curseur une fois que vous en avez le plus besoin.OriginalL'auteur zapl
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String)
utilisation de la documentation.
faire
et Poussez le NOM de la variable dans l'en-tête de la fonction.
OriginalL'auteur Lebedevsd
Vous pouvez effectuer une recherche par code suivant dans SQLite;
Dans MainActivity;
DatabaseHelper.java
OriginalL'auteur Vishal Vaishnav