2014-04-18 27 views
5

美好的一天。我有一个应用程序使用包含五个数据库表的数据库,我想要做的是能够将这些表中的两个导出为CSV文件并发送给他们。在进行初步研究后,我看到OpenCSV Library是将SQLite表导出为CSV的流行选择。然而,经过进一步的研究,我发现通过给writeAll(ResultSet rSet, Boolean includeHeaders)函数提供一个ResultSet对象可以实现导出,但是没有明确显示如何获得ResultSet。我试图寻找关于如何在DatabaseHelper类中使用ResultSet的指南,但我空了。Android - 从SQLite数据库获取ResultSet,然后用于OpenCSV

任何人都可以教我如何在我的DatabaseHelper类中实现一个函数,它将返回查询结果的ResultSet?这里是我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; 
    } 


} 

我有一种感觉,它类似于执行查询,但是,而不是得到一个游标,我应该得到一个结果和结果集返回到我的活动。

我也可以选择将sqlite数据库导出到csv文件。

回答

1

现在我完全一样。

我觉得java.sql.ResultSetandroid.database.sqlite.SQLiteDatabase只是不兼容。

  • ConnectionStatementResultSet来自Java(注册包java.sql)。

  • SQLiteDatabase来自Android和是不同的。它将返回Cursor而不是ResultSet

您可以尝试不使用Android类,但使用Java类进行数据库访问,但我不确定这是否是个好主意。

我用CursorCSVWriter#writeNext(String[])代替。 This is my implementation

相关问题