2013-04-23 6 views
-1

Я новичок в базе данных в Android. Я хочу знать, как я могу получить идентификатор строки, например NAME из моей базы данных. Я использовал следующее с небольшим количеством повторного поиска, теперь я придерживаюсь отображаемой части.Показать данные из базы данных mysqllite android

 public class DestinateurTable { 

       public String TABLE_NAME="destinateur"; 

       public String ROW_ID="rowid"; 
       public String NAME="name"; 
       public String AGENCE="agence"; 
       public String EMAIL="email"; 



      } 


     public class Destinataire { 


      public String rowid,name,agence,email; 


     } 


    **My DBHelper.class** 


    public class DBHelper { 

    private final String DATABASE_PATH = "/data/data/.../databases/"; 
    private final String DATABASE_NAME = "...sqlite"; 
    private final static int DATABASE_VERSION = 1; 

    private Context context; 
    private SQLiteDatabase database = null; 
    OpenHelper openHelper=null; 
    StringBuilder query =null; 
    Cursor cursor=null; 

    DestinateurTable destinataireTable = new DestinateurTable(); 

    public static DBHelper dbHelper = null; 

    private DBHelper(Context context) { 

    this.context = context; 
    openHelper = new OpenHelper(this.context); 
    this.database = openHelper.getWritableDatabase(); 

    try { 

     createDataBase(); 
     openDataBase(); 

    } catch (IOException e) { 

     e.printStackTrace(); 
    } 

    } 
    public static DBHelper getInstance(Context context) 
    { 
    if(dbHelper == null) 
     dbHelper = new DBHelper(context); 
    return dbHelper; 
    } 

    public void openDataBase() throws SQLException{ 

    //Open the database 
    String myPath = DATABASE_PATH + DATABASE_NAME; 
    database = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 
    } 

    /** 
    * Creates a empty database on the system and rewrites it with your own database. 
    * */ 
    public void createDataBase() throws IOException 
    { 
    openHelper.getReadableDatabase(); 
    if(getDBAlreadyCopiedToDeviceOnceFlag(context) == false){ 
     try { 
     copyDataBase(); 
     setDBAlreadyCopiedToDeviceOnceFlag(context); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     throw new Error("Error copying database"); 
     } 
    } 
    } 

    /** 
    * Check if the database already exist to avoid re-copying the file each time you open the application. 
    * @return true if it exists, false if it doesn't 
    */ 
    @SuppressWarnings("unused") 
    private boolean checkDataBase(){ 

    SQLiteDatabase checkDB = null; 

    try{ 
     String myPath = DATABASE_PATH + DATABASE_NAME; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 

    }catch(SQLiteException e){ 

     //database does't exist yet. 

    } 

    if(checkDB != null){ 

     checkDB.close(); 

    } 

    return checkDB != null ? true : false; 
    } 

    /** 
    * Copies your database from your local assets-folder to the just created empty database in the 
    * system folder, from where it can be accessed and handled. 
    * This is done by transfering bytestream. 
    * */ 
    private void copyDataBase() throws IOException{ 

    //Open your local db as the input stream 
    InputStream myInput = context.getAssets().open(DATABASE_NAME); 

    // Path to the just created empty db 
    String outFileName = DATABASE_PATH + DATABASE_NAME; 

    //Open the empty db as the output stream 
    OutputStream myOutput = new FileOutputStream(outFileName); 

    //transfer bytes from the inputfile to the outputfile 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = myInput.read(buffer))>0){ 
     myOutput.write(buffer, 0, length); 
    } 

    //Close the streams 
    myOutput.flush(); 
    myOutput.close(); 
    myInput.close(); 

    } 

    private class OpenHelper extends SQLiteOpenHelper 
    { 

     @SuppressWarnings("unused") 
     SQLiteStatement insertStmt; 

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

     @Override 
     public void onCreate(SQLiteDatabase db) 
     { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
     { 
      // TODO Auto-generated method stub 
     } 
    } 


    public void setDBAlreadyCopiedToDeviceOnceFlag(Context ctx) 
    { 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx); 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putBoolean("isDBAlreadyCopiedToDeviceOnce", true); 
     editor.commit(); 
    } 

    public boolean getDBAlreadyCopiedToDeviceOnceFlag(Context ctx) 
    { 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx); 
     boolean isDBAlreadyCopiedToDeviceOnce = prefs.getBoolean("isDBAlreadyCopiedToDeviceOnce", false); 
     return isDBAlreadyCopiedToDeviceOnce; 
    } 



    //////////////////////////// 
    //// Write your methods here 
    //////////////////////////// 

    public ArrayList<Destinataire> getDestinataireList() 
    { 
     ArrayList<Destinataire> items=new ArrayList<Destinataire>(); 

     try 
     { 
      query = new StringBuilder(); 
      query.append("select * from "+destinataireTable.TABLE_NAME); 

      cursor=this.database.rawQuery(query.toString(),null); 
      if (cursor.moveToFirst()) 
      { 
       do 
       { 
        Destinataire d=new Destinataire(); 

        d.rowid=cursor.getString(cursor.getColumnIndex(destinataireTable.ROW_ID)); 
        d.name=cursor.getString(cursor.getColumnIndex(destinataireTable.NAME)); 
        d.agence=cursor.getString(cursor.getColumnIndex(destinataireTable.AGENCE)); 
        d.email=cursor.getString(cursor.getColumnIndex(destinataireTable.EMAIL)); 

        items.add(d); 

       } 

       while (cursor.moveToNext()); 
      } 
      if (cursor != null && !cursor.isClosed()) 
      { 
      cursor.close(); 

      } 
     } 
     catch(SQLiteException e){ 

      e.printStackTrace(); 
      return null; 
     } 

     return items; 
    } 

    //--here 
    public boolean addDestinataire(Destinataire d){ 
     this.database.beginTransaction(); 

     try{ 

      ContentValues contentValues=new ContentValues(); 

      contentValues.put(destinataireTable.ROW_ID, d.rowid); 
      contentValues.put(destinataireTable.NAME, d.name); 
      contentValues.put(destinataireTable.AGENCE, d.agence); 
      contentValues.put(destinataireTable.EMAIL, d.email); 

      this.database.insert(destinataireTable.TABLE_NAME,null,contentValues); 

      this.database.setTransactionSuccessful(); 

     } catch(Exception e){ 

      e.printStackTrace(); 

      return false; 

     } finally{ 

      this.database.endTransaction(); 

     } 

     return true; 
    } 


    public boolean deleteDestinataire(String id){ 

     try { 

      String query="delete from " + destinataireTable.TABLE_NAME+" where "+destinataireTable.ROW_ID+"='"+id+"'"; 
      this.database.execSQL(query); 
     } 

     catch(SQLiteException e){ 
      e.printStackTrace(); 
      return false; 
     } 
     return true; 
    } 


} 
+0

Salut! Cool de croiser des français par ici =) Поделись с друзьями! -android/les-bases-de-donnees – ZarkDev

+0

j'ai besoin d'une solution au plus vite – Christina

+0

Faut poster plus de si tu veux de l'aide. Ta question est floue. –

ответ

0

вся ваша работа с базой данных выглядит нормально. Вы упомянули, что теперь вы хотите показать данные. Самый распространенный способ сделать это с помощью ListView, который подключен к Adapter, вы можете использовать адаптер непосредственно с курсором, но вы уже получили его в список, так что вы можете использовать ArrayAdapter

Для используйте его как простой тест, и вы начинаете понимать, как он работает. Создать новую активность, которая extends ListActivity, а затем вы пишете следующий код на нем:

public class MyListActivity extends ListActivity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ArrayList<Destinataire> items = getDestinataireList(); 
     ArrayAdapter<Destinataire> adapter = new ArrayAdapter<Destinataire>(this, android.R.layout.simple_list_item_1 , android.R.id.text1, items) 
     setListAdapter(adapter); 
    } 
} 

также включать эту строку в классе Destinataire:

@Override 
public String toString() { 
    return name + " " + agence + " " + email; 
} 

Это очень простой пример, и он не оптимизирован (для Например, вы должны использовать фоновый поток для загрузки данных из БД), но он должен отображать список с каждым элементом из вашей БД, отображающим name agence email.

счастливое кодирование!

редактировать:

эта линия:

new ArrayAdapter<Destinataire>(this, android.R.layout.simple_list_item_1 , android.R.id.text1, items) 

... есть некоторые важные детали, поэтому позвольте мне объяснить:

  • ArrayAdapter: это стандартное поведение для вызова ToString () для объектов в вашем массиве, после того, как вы сделали эту первую часть, вы можете начать изучение CustomAdapter, чтобы сделать более сложные (забавные) вещи.
  • : Это ссылка на ListActivity. Каждое действие расширяет ContextWrapper, это означает, что они содержат ссылку на ресурсы устройства. Очень важно для адаптеров создавать макеты.
  • android.R.layout.simple_list_item_1: это стандартная макета Android, которая всего лишь 1 строка текста. Очень просто, но полезно для быстрого тестирования. Он говорит адаптеру использовать этот макет для каждого элемента.
  • android.R.id.text1: это идентификатор текста внутри макета. Он сообщает адаптеру, что в макете есть TextView с этим ID. Таким образом, он будет получать toString() из объектов данных и установить его в TextView
  • : это ваши данные.
+0

Да, но если я хочу получить только имя, например, значение строки в базе данных – Christina

+0

, ArrayAdapter будет вызывать toString() в вашем классе Destinataire. Таким образом, вы можете просто изменить toString на все, что вам нужно. Теперь я отредактирую свой ответ с более подробным объяснением на адаптере. Пожалуйста прочти. – Budius

+0

Я получаю исключение нулевого указателя .. Я считаю, что мой путь к базе данных неверен .. это правильный способ взять «/ data/data/package_name/databases/как DATABASE_PATH? – Christina

Смежные вопросы