记账本小程序7天开发记录(第七天)

---恢复内容开始---

记账本小程序两天时间尝试使用xml文件进行数据的存储,但实际操作发现不可行,所以果断放弃采用Sqlite数据库。

  • 数据库的创建
  1. 定义一个数据库的帮助类MyDataBaseOpenHelper extends SQLiteOpenHelper
  2. 指定数据库的信息

通过helper得带一个可写,可读或可写且可读的数据库,数据可才会被创建

package com.fmd.database;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteDatabase.OpenParams;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDataBaseOpenHelper extends SQLiteOpenHelper {

    public MyDataBaseOpenHelper(Context context) {
        super(context, "test.db", null, 1);
    }

}

//这句代码执行完毕数据库不会创建
        MyDataBaseOpenHelper helper= new MyDataBaseOpenHelper(this);
        //下面这行代码执行后数据库才会被创建
        helper.getWritableDatabase();
  • 数据库的增删改查
  • 增: insert into tally (title,date,money) values ("花销",“2019-1-13”,“110”)
  • 删: delete from tally where title = "花销"
  • 改: update tally set money = "100"
  • 查: select * from tally where title = ?

MainActivity,java

package com.fmd.database;

import java.util.List;

import com.fmd.database.dao.TallyDao;

import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    private EditText rg_title;
    private EditText rg_date;
    private EditText rg_money;
    private TallyDao dao;
    
    private LinearLayout ll_result;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //这句代码执行完毕数据库不会创建
        MyDataBaseOpenHelper helper= new MyDataBaseOpenHelper(this);
        //下面这行代码执行后数据库才会被创建
        helper.getWritableDatabase();
        dao = new TallyDao(this);
        ll_result = findViewById(R.id.ll_result)
        rg_title = findViewById(R.id.rg_title);
        rg_date = findViewById(R.id.rg_date);
        rg_money = findViewById(R.id.rg_money);
    }

    public void save(View view) {
        String title = rg_title.getText().toString().trim();
        if(TextUtils.isEmpty(title)) {
            Toast.makeText(this, "请输入收支的标题", 0).show();
            return;
        }
        String date = rg_date.getText().toString().trim();
        if(TextUtils.isEmpty(date)) {
            Toast.makeText(this, "请输入收支的日期", 0).show();
            return;
        }
        String money = rg_money.getText().toString().trim();
        if(TextUtils.isEmpty(money)) {
            Toast.makeText(this, "请输入收支的金额", 0).show();
            return;
        }
        dao.add(title, date, money);
        Toast.makeText(this, "数据添加成功", 0).show();
        List<Tally> tallys = dao.findAll();
        ll_result.removeAllViews();
        for(Tally tally:tallys) {
            TextView tv = new TextView(this);
            tv.setText(tally.toString());
            ll_result.addView(tv);
        }
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

TallyDBOpenHelper.java

package com.fmd.tallybook_2.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class TallyDBOpenHelper extends SQLiteOpenHelper {

    public TallyDBOpenHelper(Context context) {
        super(context, "info.db", null, 1);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("creat table tally (_id intager primary key autoincrement,title varchar(20),date varchar(20),money varchar(20) )");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}

TallyDao.java

package com.fmd.tallybook_2.db.dao;

import java.util.ArrayList;
import java.util.List;

import com.fmd.tallybook_2.db.TallyDBOpenHelper;
import com.fmd.tallybook_2.domain.Tally;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class TallyDao {

    private TallyDBOpenHelper helper;
    
    //只有一个有参的构造方法,要求必须传入上下文
    public TallyDao(Context context) {
        helper = new TallyDBOpenHelper(context);
    }
    //添加一个记录
    public void add(String title,String date,String money) {
         SQLiteDatabase db = helper.getWritableDatabase();
         db.execSQL("insert into tally (title,date,money) values (?,?,?)",new Object[] {title,date,money});
         db.close();
    }
    
    //删除一个记录
    public void delete(String title) {
         SQLiteDatabase db = helper.getWritableDatabase();
         db.execSQL("delete from tally where title = ?",new Object[] {title});
         db.close();
    }
    //修改一个记录
    public void update(String title,String newdate,String newmoney) {
         SQLiteDatabase db = helper.getWritableDatabase();
         db.execSQL("update tally set date = ?",new Object[] {newdate,title,newmoney});
         db.close();
    }
    //查询一条记录
    public String find(String title) {
        String date = null;
        String money = null;
        SQLiteDatabase db = helper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select * from tally where title = ?",new String[] {title});
        boolean result = cursor.moveToNext();
        if(result) {
            date = cursor.getString(0);
            money = cursor.getString(0);
        }
        cursor.close();
        db.close();
        return date+money;
    }
    //获取全部的账单信息
    public List<Tally> fidnAll(){
        List<Tally> tallys = new ArrayList<Tally>();
        SQLiteDatabase db = helper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select title, date, money from tally", null);
        while(cursor.moveToNext()) {
            String title  = cursor.getString(0);
            String date  = cursor.getString(1);
            String money  = cursor.getString(2);
            Tally tally = new Tally();
            tally.setTitle(title);
            tally.setDate(date);
            tally.setMoney(money);
            tallys.add(tally);
        }
        cursor.close();
        db.close();
        return tallys;
    }
}

Tally.java

package com.fmd.tallybook_2.domain;

public class Tally {

    private String title;
    private String date;
    private String money;
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public String getMoney() {
        return money;
    }
    public void setMoney(String money) {
        this.money = money;
    }
    @Override
    public String toString() {
        return "Tally [title=" + title + ", date=" + date + ", money=" + money + "]";
    }
    
    
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.fmd.database.MainActivity" >

    <EditText
        android:id="@+id/rg_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="请输入Title"/>

    <EditText
        android:id="@+id/rg_date"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="请输入Date"/>
    
    <EditText
        android:id="@+id/rg_money"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="请输入Money"/>
    
    <Button
        android:onClick="save"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="保存"
        />
    
    <LinearLayout
        android:id="@+id/ll_result"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">
    </LinearLayout>
    
</LinearLayout>

---恢复内容结束---

posted @ 2019-02-23 21:25  符黑石  阅读(359)  评论(0编辑  收藏  举报