2014-04-18 11 views
5

Buona giornata. Ho un'applicazione che utilizza un database che contiene cinque tabelle di database, quello che voglio fare è poter esportare due di queste tabelle come file CSV e inviarle via email. Dopo aver effettuato una ricerca iniziale, ho visto che OpenCSV Library era una scelta popolare per l'esportazione di tabelle SQLite in formato CSV. Tuttavia, dopo ulteriori ricerche, ho visto che l'esportazione funziona dando un oggetto ResultSet alla funzione writeAll(ResultSet rSet, Boolean includeHeaders), tuttavia, non è stato mostrato esplicitamente su come viene ottenuto il ResultSet. Ho provato a cercare le guide su come utilizzare un ResultSet in una classe DatabaseHelper, ma sono arrivato vuoto.Android: ottieni ResultSet dal database SQLite, quindi utilizza OpenCSV

Qualcuno può insegnarmi come implementare una funzione nella mia classe DatabaseHelper che restituisce ResultSet del risultato della query? Qui è la mia classe DatabaseHelper:

public class OrderListDBAdapter { 

    private DatabaseHelper mDBHelper; 
    private SQLiteDatabase mDB; 
    private final Context context; 

    private static class DatabaseHelper extends SQLiteOpenHelper { 

     DatabaseHelper(Context context) { 
      super(context, "itemList.db", null, 1); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     } 
    } 


    public OrderListDBAdapter(Context context){ 
     this.context = context; 
    } 

    public OrderListDBAdapter open() throws SQLException{ 
     this.mDBHelper = new DatabaseHelper(this.context); 
     //this.mDB = this.mDBHelper.getWritableDatabase(DBAdapter.key); 
     this.mDB = this.mDBHelper.getWritableDatabase(); 
     return this;  
    } 

    public void close(){ 
     this.mDBHelper.close(); 
    } 

    //TODO - crud queries 
    public long insertOrder(OrderListClass order){ 
     Log.d("Angelo", "Hi, insert Order entered"); 
     ContentValues values = new ContentValues(); 

     values.put("orderDate", order.getOrderDate()); 
     values.put("customer", order.getCustomer()); 
     values.put("agent", order.getAgent()); 
     values.put("itemName", order.getItemName()); 
     values.put("price", order.getPrice()); 
     values.put("discount", order.getDiscount()); 
     values.put("quantity", order.getQuantity()); 
     values.put("requestedDiscount", order.getRequestedDiscount()); 

     return this.mDB.insert("OrderList", null, values); 
    } 

    public boolean deleteOrder(String productname) { 
     Log.d("Angelo", "Hi, delete Order entered"); 
     return mDB.delete("OrderList", "itemName =" + productname, null) > 0; 
    } 

    public int updateOrder(OrderListClass order) { 
     Log.d("Angelo", "Hi, update Order entered"); 

     ContentValues values = new ContentValues(); 
     values.put("orderDate", order.getOrderDate()); 
     values.put("customer", order.getCustomer()); 
     values.put("agent", order.getAgent()); 
     values.put("itemName", order.getItemName()); 
     values.put("price", order.getPrice()); 
     values.put("discount", order.getDiscount()); 
     values.put("quantity", order.getQuantity()); 
     values.put("requestedDiscount", order.getRequestedDiscount()); 

     // updating row 
     return mDB.update("OrderList", values, "itemName" + " = ?", new String[] { order.getItemName() }); 
    } 

    public ArrayList<OrderSummaryListViewItem> getAllOrders(String date, String customerName){ 
     ArrayList<OrderSummaryListViewItem> orders = new ArrayList<OrderSummaryListViewItem>(); 

     String query = "SELECT itemName, price, discount, quantity, requestedDiscount FROM OrderList WHERE orderDate = '" 
       + date + "' AND customer = '" + customerName + "'"; 

     Cursor cursor = mDB.rawQuery(query, null); 
     if (cursor.moveToFirst()) { 
      do { 

       String quantity = cursor.getString(cursor.getColumnIndex("quantity")); 
       String itemName = cursor.getString(cursor.getColumnIndex("itemName")); 
       String discount = cursor.getString(cursor.getColumnIndex("discount")); 
       String price = cursor.getString(cursor.getColumnIndex("price")); 
       String discRequest = cursor.getString(cursor.getColumnIndex("requestedDiscount")); 

       OrderSummaryListViewItem entry = new OrderSummaryListViewItem(quantity, itemName, discount, price, discRequest); 

       orders.add(entry); 
      } while (cursor.moveToNext()); 
     } 

     cursor.close(); 

     return orders; 
    } 


} 

ho la sensazione che sia simile a esecuzione di una query, però, invece di ottenere un cursore, dovrei ottenere un ResultSet e ritorno che ResultSet alla mia attività.

Sono inoltre aperto a metodi alternativi per esportare un db sqlite in un file csv.

risposta

1

Sono esattamente allo stesso punto ora.

Penso che java.sql.ResultSet e android.database.sqlite.SQLiteDatabase sono semplicemente incompatibili.

  • Connection, Statement, e ResultSet provengono da Java (pacchetto java.sql).

  • SQLiteDatabase viene da Android ed è diverso. Invece di un ResultSet restituisce un Cursor.

Si potrebbe provare a non utilizzare le classi di Android ma le classi Java per l'accesso al database, ma non sono sicuro che sia una buona idea.

Io uso Cursor e CSVWriter#writeNext(String[]) invece. This is my implementation.