no dobra, wrzucę działającą klasę z mojej "próbnej" aplikacji:
package com.pawegio.counter;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.util.Log;
public class TransactionListDb {
private static final String TAG = "TransactionListDb";
private static final String DB_NAME = "data.db";
private static final int DB_VERSION = 7;
private static final String DB_TABLE = "transaction_list";
public static final String KEY_ID = "_id";
public static final String KEY_TITLE = "title";
public static final String KEY_TYPE = "type";
public static final String KEY_AMOUNT = "amount";
public static final String KEY_DAY = "day";
public static final String KEY_MONTH = "month";
public static final String KEY_YEAR = "year";
public static final String KEY_HOUR = "hour";
public static final String KEY_MINUTE = "minute";
public static final int TITLE_COLUMN = 1;
public static final int TYPE_COLUMN = 2;
public static final int AMOUNT_COLUMN = 3;
public static final int DAY_COLUMN = 4;
public static final int MONTH_COLUMN = 5;
public static final int YEAR_COLUMN = 6;
public static final int HOUR_COLUMN = 7;
public static final int MINUTE_COLUMN = 8;
private static final String DB_CREATE = "CREATE TABLE " +
DB_TABLE + " (" +
KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
KEY_TITLE + " TEXT NOT NULL," +
KEY_TYPE + " TEXT NOT NULL," +
KEY_AMOUNT + " REAL NOT NULL," +
KEY_DAY + " INTEGER NOT NULL," +
KEY_MONTH + " INTEGER NOT NULL," +
KEY_YEAR + " INTEGER NOT NULL," +
KEY_HOUR + " INTEGER NOT NULL," +
KEY_MINUTE + " INTEGER NOT NULL" +
");";
private SQLiteDatabase db;
private DatabaseHelper dbHelper;
public TransactionListDb(Context _context) {
dbHelper = new DatabaseHelper(_context, DB_NAME, null, DB_VERSION);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database");
db.execSQL("DROP TABLE IF EXISTS transaction_list");
onCreate(db);
}
}
public TransactionListDb open() {
db = dbHelper.getWritableDatabase();
return this;
}
public void close() {
db.close();
}
public long insertTransaction(Transaction _transaction) {
ContentValues newTransactionValues = new ContentValues();
newTransactionValues.put(KEY_TITLE, _transaction.getTransactionTitle());
newTransactionValues.put(KEY_TYPE, _transaction.getTransactionType());
newTransactionValues.put(KEY_AMOUNT, _transaction.getTransactionAmount());
newTransactionValues.put(KEY_DAY, _transaction.getTransactionDay());
newTransactionValues.put(KEY_MONTH, _transaction.getTransactionMonth());
newTransactionValues.put(KEY_YEAR, _transaction.getTransactionYear());
newTransactionValues.put(KEY_HOUR, _transaction.getTransactionHour());
newTransactionValues.put(KEY_MINUTE, _transaction.getTransactionMinute());
return db.insert(DB_TABLE, null, newTransactionValues);
}
public boolean updateTransaction(long _index, Transaction _transaction) {
String where = KEY_ID + "=" + _index;
ContentValues updateTransactionValues = new ContentValues();
updateTransactionValues.put(KEY_TITLE, _transaction.getTransactionTitle());
updateTransactionValues.put(KEY_TYPE, _transaction.getTransactionType());
updateTransactionValues.put(KEY_AMOUNT, _transaction.getTransactionAmount());
updateTransactionValues.put(KEY_DAY, _transaction.getTransactionDay());
updateTransactionValues.put(KEY_MONTH, _transaction.getTransactionMonth());
updateTransactionValues.put(KEY_YEAR, _transaction.getTransactionYear());
updateTransactionValues.put(KEY_HOUR, _transaction.getTransactionHour());
updateTransactionValues.put(KEY_MINUTE, _transaction.getTransactionMinute());
return db.update(DB_TABLE, updateTransactionValues, where, null) > 0;
}
public boolean deleteTransaction(long _index) {
String where = KEY_ID + "=" + _index;
return db.delete(DB_TABLE, where, null) > 0;
}
public void deleteAll() {
db.delete(DB_TABLE, "1", null);
}
public Cursor getAllEntries() {
String[] columns = {KEY_ID, KEY_TITLE, KEY_TYPE, KEY_AMOUNT,
KEY_DAY, KEY_MONTH, KEY_YEAR, KEY_HOUR, KEY_MINUTE};
return db.query(DB_TABLE, columns, null, null, null, null, null);
}
public Transaction getEntry(long _index) {
String[] columns = {KEY_ID, KEY_TYPE, KEY_TITLE, KEY_AMOUNT,
KEY_DAY, KEY_MONTH, KEY_YEAR, KEY_HOUR, KEY_MINUTE};
Cursor cursor = db.query(true, DB_TABLE, columns, null,
null, null, null, null, null);
Transaction transaction = new Transaction(cursor.getString(TITLE_COLUMN),
cursor.getString(TYPE_COLUMN),
cursor.getInt(AMOUNT_COLUMN), cursor.getInt(DAY_COLUMN), cursor.getInt(MONTH_COLUMN),
cursor.getInt(YEAR_COLUMN), cursor.getInt(HOUR_COLUMN),
cursor.getInt(MINUTE_COLUMN));
return transaction;
}
public float getBalance() {
Cursor c = getAllEntries();
long l = DatabaseUtils.queryNumEntries(db, DB_TABLE);
float sum = 0;
for(int i = 1; i < l; i++) {
c.moveToPosition(i);
sum += c.getFloat(3);
}
/*Cursor cursor = db.rawQuery(
"SELECT SUM(" + KEY_AMOUNT + ") from " + DB_TABLE, null);
if(cursor.moveToFirst()) {
return cursor.getFloat(0);
}*/
return sum;
}
}
no i Activity:
package com.pawegio.counter;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class DroidCounter extends ListActivity {
private TransactionListDb db;
private TextView transactionBalance;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
db = new TransactionListDb(this);
db.open();
fillData();
showBalance();
}
private void fillData() {
Cursor c = db.getAllEntries();
startManagingCursor(c);
String[] from = new String[] {TransactionListDb.KEY_TITLE,
TransactionListDb.KEY_TYPE,
TransactionListDb.KEY_AMOUNT, TransactionListDb.KEY_DAY,
TransactionListDb.KEY_MONTH, TransactionListDb.KEY_YEAR};
int[] to = new int[] {R.id.transaction_title, R.id.transaction_type,
R.id.transaction_amount,
R.id.transaction_day, R.id.transaction_month,
R.id.transaction_year};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.transaction, c, from, to);
setListAdapter(adapter);
}
private void showBalance() {
float _balance = db.getBalance();
transactionBalance = (TextView)findViewById(R.id.transaction_balance);
transactionBalance.setText("Balance: $" + String.format("%.2f",_balance));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Intent intent = new Intent(this, TransactionView.class);
intent.putExtra("_pos", position);
intent.putExtra("_id", id);
startActivity(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, 1, 0, R.string.add_transaction);
menu.add(0, 2, 1, R.string.quit);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch(item.getItemId()) {
case 1:
addTransaction();
return true;
case 2:
finish();
return true;
}
return super.onMenuItemSelected(featureId, item);
}
private void addTransaction() {
Intent intent = new Intent(this, TransactionEditor.class);
startActivity(intent);
}
@Override
protected void onResume() {
super.onResume();
fillData();
showBalance();
}
}