2016-08-21 1 views
-1

J'essaie de lire des données de SQLite dans android en utilisant trois paramètres, identifiant, nom et date. Par exemple, id = "number" et name = "something" et date entre ("first date", "second date"). le problème est que, je ne peux pas savoir quoi faire avec la dernière fonction. Il reste deux autres paramètres et je ne sais pas quoi faire ni où le placer. Alors, est-ce que quelqu'un a de l'expérience et connaît ce style de code et peut-il partager ou m'aider? (Je prends ce code de livre aussi, et il n'y avait pas de solution liée à du tout dans le livre.)Récupérer des données de SQLite sur android

//Table person; It contain the same attribute as Person class 
public static final class PersonTable 
{ 
    public static final String NAME = "Persons"; 
    public static final class Cols 
    { 
     static final String ID = "id"; 
     static final String NAME = "name"; 
     static final String DATE = "date"; 
    } 
}  



public class PersonCursorWrapper extends CursorWrapper 
{ 
     public PersonCursorWrapper(Cursor cursor) 
    { 
      super(cursor); 
     } 

    public Person getPerson() 
    { 
      int id = geIntI(getColumnIndex(PersonTable.Cols.ID)); 
      String name = getString(getColumnIndex(PersonTable.Cols.NAME)); 
      long date = getLong(getColumnIndex(PersonTable.Cols.DATE)); 


      Person Person = new Person(); 
      Person.id(id); 
      Person.setDate(new Date(date)); 
      Person.setName(name); 

      return Person; 
     } 
    } 
} 


private PersonCursorWrapper queryPersons(String whereClause, String[] whereArgs) 
{ 
    Cursor cursor = mDatabase.query 
    (
     PersonTable.NAME, 
     null, 
     whereClause, 
     whereArgs, 
     null, 
     null, 
     null 
    ); 

     return new PersonCursorWrapper(cursor); 
    } 



public Person getPerson(int id, String name, String date) 
{ 
    PersonCursorWrapper cursor = queryPersons(
     PersonTable.Cols.ID + " = ?"+" "+ 
     PersonTable.Cols.NAME + " = ?"+" "+ 
     PersonTable.Cols.DATE + " = ?", 
     new String[] { id.toString() } 
     ); 

    try 
    { 
       if (cursor.getCount() == 0) 
       { 
        return null; 
       } 

       cursor.moveToFirst(); 
       return cursor.getPerson(); 
    } 
    finally 
    { 
       cursor.close(); 
    } 
} 
+0

Quelle méthode voulez-vous dire? Voulez-vous dire 'mDatabase.query (...)'? –

+0

@AbdulhamidDhaiban mDatabase est un instant de classe SQLiteDatabase. Et je ne comprends pas bien aussi. Je l'ai trouvé dans le livre. –

+0

Nous ne savons pas de quel livre vous parlez, donc je ne sais pas pourquoi vous en parlez –

Répondre

0

Pour les opérations de base de données android sqlite vous pouvez simplement utiliser la classe SQLiteOpenHelper fourni avec Android.

Ceci est une implémentation complète pour votre cas avec SQLiteOpenHelper.

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

import java.util.ArrayList; 
import java.util.List; 

public class DatabaseHandler2 extends SQLiteOpenHelper { 

// Database details 
private static final int DATABASE_VERSION = 1; 
private static String DATABASE_NAME = "dbname.db"; 

// Table names 
private static String TABLE_PERSON = "person"; 

// Table Columns name 
private static final String COLUMN_ID = "workout_id"; 
private static final String COLUMN_NAME = "exercise_id"; 

// Create queries 
private static final String CREATE_TABLE_PERSON = "CREATE TABLE " +   TABLE_PERSON + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT NOT NULL)"; 

public DatabaseHandler2(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(CREATE_TABLE_PERSON); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + CREATE_TABLE_PERSON); 
} 


public Person getPerson(int id) { 
    Person person = new Person(); 

    String selectQuery = "SELECT * FROM " + TABLE_PERSON + " WHERE " + COLUMN_ID + "=" + id; 
    SQLiteDatabase rdb; 
    rdb = this.getReadableDatabase(); 
    Cursor cursor = rdb.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      person.setId(cursor.getInt(0)); 
      person.setName(cursor.getString(1)); 
     } while (cursor.moveToNext()); 
    } 
    cursor.close(); 
    rdb.close(); 

    return person; 
} 

public List<Person> getAllPersons() { 
    List<Person> personList = new ArrayList<Person>(); 
    String selectQuery = "SELECT * FROM " + TABLE_PERSON; 
    SQLiteDatabase rdb; 
    rdb = this.getReadableDatabase(); 
    Cursor cursor = rdb.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      Person person = new Person(); 
      person.setId(cursor.getInt(0)); 
      person.setName(cursor.getString(1)); 
      personList.add(person); 
     } while (cursor.moveToNext()); 
    } 
    cursor.close(); 
    rdb.close(); 

    return personList; 
} 

public void savePerson(Person person) { 
    SQLiteDatabase wdb; 

    ContentValues values = new ContentValues(); 
    values.put(COLUMN_ID, person.getId()); 
    values.put(COLUMN_NAME, person.getName()); 
    wdb = this.getWritableDatabase(); 
    long rowId = wdb.insert(TABLE_PERSON, null, values); 
    wdb.close(); 
} 

public void deletePerson(int id) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_PERSON, COLUMN_ID + "='" + id + "'", null); 
    db.close(); 
} 

public boolean renamePerson(int id, String newName) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(COLUMN_NAME, newName); 

    int numOfRowsEffected = db.update(TABLE_PERSON, values, COLUMN_ID + "='" + id + "'", null); 
    db.close(); 
    return numOfRowsEffected > 0 ? true : false; 
} 
} 

Voici la classe personne

public class Person {

private int id; 
private String name; 

public Person() { 
} 

public Person(int id, String name) { 
    this.id = id; 
    this.name = name; 
} 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 
} 
+0

@dra, en fait, ma question concerne uniquement la fonction getPerson. D'abord, il doit interroger avec condition. Par exemple, name = "something" et id = "number". Et puis, puis-je avoir une autre solution alternative sans utiliser quelque chose comme SQLiteDatabase.execute ("command"), mais en suivant quelque chose de similaire à la dernière fonction? Et encore merci d'essayer d'aider. –

+0

Ma réponse a une fonction getPerson() –

1

Vous avez trois marqueurs de paramètres (?), donc vous devez donner trois paramètres:

cursor = queryPersons(
    ..., 
    new String[] { id.toString(), name, date } 
);