zoukankan      html  css  js  c++  java
  • 项目开发第五天

    今天完善项目的数据库操作:

    定义三个数据库,分别表示收入、支出和添加类别。

    package net.hnjdzy.tinyaccount.db;
    
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.util.Log;
    
    import net.hnjdzy.tinyaccount.entity.AccountCategory;
    import net.hnjdzy.tinyaccount.entity.AccountItem;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    /*
     * 数据访问类
     */
    public class AccountDao {
        private DatabaseHelper helper;
        private SQLiteDatabase db;
        public AccountDao(Context context) {
            helper = new DatabaseHelper(context);
            //因为getWritableDatabase内部调用了mContext.openOrCreateDatabase(mName, 0, mFactory);
            //所以要确保context已初始化,我们可以把实例化DBManager的步骤放在Activity的onCreate里
            db = helper.getWritableDatabase();
        }
    
        //收入类型
        public List<AccountCategory> getIncomeType(){
            ArrayList<AccountCategory> result = new ArrayList<AccountCategory>();
            String sql = "select id,category,icon from AccountIncomeType";
            Cursor cursor = db.rawQuery(sql, null);
            while (cursor.moveToNext()){
                int id = cursor.getInt(cursor.getColumnIndex("id"));
                String category = cursor.getString(cursor.getColumnIndex("category"));
                int icon = cursor.getInt(cursor.getColumnIndex("icon"));
                AccountCategory c = new AccountCategory(id,category,icon);
                result.add(c);
            }
            cursor.close();
            return result;
        }
    
        //支出类型
        public List<AccountCategory> getOutlayType(){
            ArrayList<AccountCategory> result = new ArrayList<AccountCategory>();
            String sql = "select id,category,icon from AccountOutlayType";
            Cursor cursor = db.rawQuery(sql, null);
            while (cursor.moveToNext()){
                int id = cursor.getInt(cursor.getColumnIndex("id"));
                String category = cursor.getString(cursor.getColumnIndex("category"));
                int icon = cursor.getInt(cursor.getColumnIndex("icon"));
                AccountCategory c = new AccountCategory(id,category,icon);
                result.add(c);
            }
            cursor.close();
            return result;
        }
    
        //收入类型
        public List<AccountItem> getIncomeList(){
            ArrayList<AccountItem> result = new ArrayList<AccountItem>();
            Cursor cursor = db.query("AccountIncome", null, null, null, null, null, null);
            while (cursor.moveToNext()){
                AccountItem item = new AccountItem();
                item.setId(cursor.getInt(cursor.getColumnIndex("id")));
                item.setCategory(cursor.getString(cursor.getColumnIndex("category")));
                item.setMoney(cursor.getDouble(cursor.getColumnIndex("money")));
                item.setDate(cursor.getString(cursor.getColumnIndex("date")));
                item.setRemark(cursor.getString(cursor.getColumnIndex("remark")));
                result.add(item);
            }
            cursor.close();
            return result;
        }
    
        //支出类型
        public List<AccountItem> getOutlayList(){
            ArrayList<AccountItem> result = new ArrayList<AccountItem>();
            String sql = "select id,category,money,remark,date from AccountOutlay";
            Cursor cursor = db.rawQuery(sql, null);
            while (cursor.moveToNext()){
                AccountItem item = new AccountItem();
                item.setId(cursor.getInt(cursor.getColumnIndex("id")));
                item.setCategory(cursor.getString(cursor.getColumnIndex("category")));
                item.setMoney(cursor.getDouble(cursor.getColumnIndex("money")));
                item.setDate(cursor.getString(cursor.getColumnIndex("date")));
                item.setRemark(cursor.getString(cursor.getColumnIndex("remark")));
                result.add(item);
            }
            cursor.close();
            return result;
        }
    
        //添加收入
        public void addIncome(AccountItem item) {
            db.beginTransaction();
            try {
                db.execSQL("INSERT INTO AccountIncome(id,category,money,date,remark) VALUES(null,?,?,?,?)",
                        new Object[]{item.getCategory(), item.getMoney(),item.getDate(),item.getRemark()});
    
                db.setTransactionSuccessful();
            } finally {
                db.endTransaction();
            }
        }
    
        //添加支出
        public void addOutlay(AccountItem item) {
            db.beginTransaction();
            try {
                db.execSQL("INSERT INTO AccountOutlay(id,category,money,date,remark) VALUES(null,?,?,?,?)",
                        new Object[]{item.getCategory(), item.getMoney(),item.getDate(),item.getRemark()});
    
                db.setTransactionSuccessful();
            } finally {
                db.endTransaction();
            }
        }
        //删除收入
        public void deleteIncome(long id) {
            String sql = "delete from AccountIncome where id="+id;
    
            db.beginTransaction();
            try {
                db.execSQL(sql);
                db.setTransactionSuccessful();
            } finally {
                db.endTransaction();
            }
    
        }
    
        //添加收入类型
        public void addIncomeCategory(String category,int icon) {
            db.beginTransaction();
            try {
                db.execSQL("INSERT INTO AccountIncomeType(id,category,icon) VALUES(null,?,?)",
                        new Object[]{category,icon});
    
                db.setTransactionSuccessful();
            } finally {
                db.endTransaction();
            }
        }
    
        //添加支出3类型
        public void addOutlayCategory(String category,int icon) {
            db.beginTransaction();  //开始事务
            try {
                db.execSQL("INSERT INTO AccountOutlayType(id,category,icon) VALUES(null,?,?)",
                        new Object[]{category,icon});
    
                db.setTransactionSuccessful();  //设置事务成功完成
            } finally {
                db.endTransaction();    //结束事务
            }
        }
    }
    package net.hnjdzy.tinyaccount.db;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    import net.hnjdzy.tinyaccount.R;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class DatabaseHelper extends SQLiteOpenHelper {
    
        private static final String DATABASE_NAME = "account.db";
        private static final int DATABASE_VERSION = 1;
    
        public DatabaseHelper(Context context) {
            //建库
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            // 建表
            //收入类别
            String sql = "CREATE TABLE accountincometype(id integer primary key autoincrement,category text,icon integer)";
            db.execSQL(sql);
            //收入明细表(id,类别,金额,备注,日期时间)
            sql = "CREATE TABLE accountincome(id integer primary key autoincrement,category text,"+
                    "money double,remark text,date text)";
            db.execSQL(sql);
    
            //支出类别
            sql = "CREATE TABLE accountoutlaytype(id integer primary key autoincrement,category text,icon integer)";
            db.execSQL(sql);
            //支出明细表(id,类别,金额,备注,日期时间)
            sql = "CREATE TABLE accountoutlay(id integer primary key autoincrement,category text,"+
                    "money double,remark text,date text)";
            db.execSQL(sql);
    
            //初始化的数据
            initData(db);
        }
        //自动增长的列表,不需要给值;某个字段不想给值,不出现在表名后的列表中
        private void initData(SQLiteDatabase db) {
            //收入类别
            String sql = String.format("insert into accountincometype(category,icon) values('工资',%d)", R.drawable.fund_icon);
            db.execSQL(sql);
            sql = String.format("insert into accountincometype(category,icon) values('奖金',%d)", R.drawable.insurance_icon);
            db.execSQL(sql);
            sql = String.format("insert into accountincometype(category,icon) values('兼职收入',%d)", R.drawable.baby_icon);
            db.execSQL(sql);
    
            //支出类别
            sql = String.format("insert into accountoutlaytype(category,icon) values('交通',%d)", R.drawable.traffic_icon);
            db.execSQL(sql);
            sql = String.format("insert into accountoutlaytype(category,icon) values('食物',%d)", R.drawable.breakfast_icon);
            db.execSQL(sql);
            sql = String.format("insert into accountoutlaytype(category,icon) values('图书',%d)", R.drawable.book_icon);
            db.execSQL(sql);
            sql = String.format("insert into accountoutlaytype(category,icon) values('电影',%d)", R.drawable.film_icon);
            db.execSQL(sql);
            sql = String.format("insert into accountoutlaytype(category,icon) values('房租',%d)", R.drawable.housing_loan_icon);
            db.execSQL(sql);
            sql = String.format("insert into accountoutlaytype(category,icon) values('运动',%d)", R.drawable.sport_icon);
            db.execSQL(sql);
    
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String currentDate = sdf.format(new Date());
            //收入明细
            sql = "insert into accountincome(category,money,date) values('工资',10000,'"+currentDate+"')";
            db.execSQL(sql);
            sql = "insert into accountincome(category,money,date) values('奖金',1000,'"+currentDate+"')";
            db.execSQL(sql);
    
            //支出明细
            sql = "insert into accountoutlay(category,money,date) values('交通',100,'"+currentDate+"')";
            db.execSQL(sql);
            sql = "insert into accountoutlay(category,money,date) values('食物',200,'"+currentDate+"')";
            db.execSQL(sql);
            sql = "insert into accountoutlay(category,money,date) values('图书',150,'"+currentDate+"')";
            db.execSQL(sql);
            sql = "insert into accountoutlay(category,money,date) values('电影',100,'"+currentDate+"')";
            db.execSQL(sql);
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
            // TODO Auto-generated method stub
    
        }
    
    }
  • 相关阅读:
    Eclipse / android studio 添加第三方jar包 步骤
    Android checkbox 自定义点击效果
    Android 程序打包和安装过程
    Android 基础
    (转)Genymotion安装virtual device的“unable to create virtual device, Server returned Http status code 0”的解决方法
    (转)eclipse 导入Android 项目 步骤
    微信开放平台注册 步骤
    Android Studio 初级安装
    数组
    作用域问题代码
  • 原文地址:https://www.cnblogs.com/w669399221/p/12319415.html
Copyright © 2011-2022 走看看