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.