zoukankan      html  css  js  c++  java
  • 记账本小程序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>

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

  • 相关阅读:
    爬虫requests模块 1
    刷题记录:ctf473831530_2018_web_virink_web
    刷题记录:[RCTF 2019]Nextphp
    CTF XSS
    PHP 7 源码学习 序&第一、二章
    刷题记录:[安洵杯 2019]iamthinking
    刷题记录:[GWCTF 2019]枯燥的抽奖
    preg_match绕过总结
    刷题记录:[SWPU2019]easy_python
    刷题记录:[GWCTF 2019]我有一个数据库
  • 原文地址:https://www.cnblogs.com/fuheishi/p/10424320.html
Copyright © 2011-2022 走看看