AddFragment.java:

package com.example.familybooks;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast; public class AddFragment extends Fragment {
@Nullable
String TAG="TAG";
private EditText costTitle,costMoney;
private Button btn_go,btn_return;
private DatePicker costDate;
private SQLiteDatabase database;
DatabaseHelper helper; @Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
View view=inflater.inflate(R.layout.activity_add,container,false);
return view;
} public void onActivityCreate(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState); costTitle=(EditText)getActivity().findViewById(R.id.et_costtitle);
costMoney=(EditText)getActivity().findViewById(R.id.et_costmoney);
costDate=(DatePicker) getActivity().findViewById(R.id.dp_costdate); helper=new DatabaseHelper(getActivity(),"account_cost",null,1); btn_go=(Button)getActivity().findViewById(R.id.btn_go);
btn_go.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(),"accoun_cost",Toast.LENGTH_LONG).show();
database=helper.getWritableDatabase();
Insert(); costTitle.setText("");
//costDate.setText("");
costMoney.setText("");
Toast.makeText(getActivity(),"accoun_cost",Toast.LENGTH_LONG).show();
}
}); btn_return=(Button)getActivity().findViewById(R.id.btn_return);
btn_return.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
//得到数据库
database=helper.getWritableDatabase();
//查询数据
Query(); Toast.makeText(getActivity(),"accoun_cost",Toast.LENGTH_LONG).show();
}
}); }
public void Query(){
Cursor cursor=database.query("account_cost",null,null,null,null,null,null);
if(cursor.moveToFirst()){
do{
String title=cursor.getString(cursor.getColumnIndex("title"));
String date=cursor.getString(cursor.getColumnIndex("date"));
String money=cursor.getString(cursor.getColumnIndex("money"));
Log.i(TAG,"title:"+title);
Log.i(TAG,"date:"+date);
Log.i(TAG,"money:"+money);
}while(cursor.moveToNext());
}
cursor.close();
} public void Insert(){
ContentValues values=new ContentValues();
values.put("title",costTitle.getText().toString());
values.put("date",costTitle.getText().toString());
values.put("money",costMoney.getText().toString());
database.insert("account_cost",null,values);
}
}

DatabaseHelper.java:

package com.example.familybooks;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; import androidx.annotation.Nullable; public class DatabaseHelper extends SQLiteOpenHelper { private Context context;
public DatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context,"account_daily",null, 1);
this.context=context;
} @Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table diary(id integer PRIMARY KEY AUTOINCREMENT," +"costTitle text,costDate text,costMoney text)"); } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists diary");
onCreate(db);
}
}

总结:

SQLiteOpenHelper是个抽象类,在该类中有如下两个抽象方法,SQLiteOpenHelper的子类必须实现这两个方法。
      public abstract void onCreate(SQLiteDatabase db);
      public abstract void onUpdate(SQLiteDatabase db,int oldVersion,int newVersion);

如果数据库文件不存在,只有oncreate()被调用(该方法在创建数据库时被调用一次)。

如果数据库文件存在,会调用onupdate()方法升级数据库,并更新版本号。

进度3_家庭记账本App_Fragment使用SQLite实现简单存储及查询的更多相关文章

  1. 进度1_家庭记账本App

    今天完成了昨天的初步构想,详细介绍见上一篇博客,具体项目结构和案例如下: MainActivity.java: package com.example.familybooks; import andr ...

  2. 进度5_家庭记账本App_数据库的添加和查看

    今天继续在昨天的基础上完成了家庭记账单的在数据库中的添加和查看功能 在之前的基础上舍弃了Fragment,重新在百度上找到了学习资料,并且自我完成了实践 首先在之前的基础上创建CostListAdap ...

  3. 进度4_家庭记账本App

    在上一个博客中,我学习了用Fragment进行数据的传值,但是出现了好多问题,我通过百度查阅资料发现fregment在进行数值传输的时候有的语法不能使用,并且不方便的进行数据库的使用,所以我在原来的家 ...

  4. 进度2_家庭记账本App

    今天在昨天的基础上,相继完成了三个页面的布局和显示情况: 新增加的xml文件如下: activity_add.xml: <?xml version="1.0" encodin ...

  5. 家庭记账本app进度之关于tap的相关操作1

    今天还主要学习关于怎样制作微信的先关的tap. 今天的主要成果是已经了解了相关的技术,以及相关的思路.代码经过一个下午的编写,基本接近尾声. 更详细的实验代码,以及相关的知识点将在明天完善后进行发表. ...

  6. 家庭记账本app进度之android中AlertDialog的相关应用以及对日期时间的相关操作(应用alertdialog使用的谈话框)

    对于AlertDialog的相关知识: 1.创建构造器AlertDialog.Builder的对象:    2.通过构造器对象调用setTitle.setMessage.setIcon等方法构造对话框 ...

  7. 家庭记账本app进度之对于登录和注册两个界面点击按钮的相互跳转

    这次主要完成了两个两个android页面之间的跳转.从登录页面点击注册就会跳转到注册页面.在注册页面点击返回登录,这样就可以返回到登录界面.主要是这样的操作.其中遇到了一个困难主要是当点击按钮的时候, ...

  8. 家庭记账本app进度之ui相关概念控制ui界面与布局管理

    ui就是用户界面设计的意思. 首先是view,view相当于窗户上的玻璃. 1.android:id属性.android:id="@+id/user".他的id是user前面的@+ ...

  9. 家庭记账本app进度之下拉框和数字转轮的相关应用

    这次主要是悬系的下拉框Spinner和数字转轮NumberPicker的使用.先分析相关的用到的知识点. 在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例子 ...

随机推荐

  1. 2-10 就业课(2.0)-oozie:5、通过oozie执行hive的任务

    4.2.使用oozie调度我们的hive 第一步:拷贝hive的案例模板 cd /export/servers/oozie-4.1.0-cdh5.14.0 cp -ra examples/apps/h ...

  2. VUE - 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法

     created() {     var that=this     axios.get('http://jsonplaceholder.typicode.com/todos')     .then( ...

  3. Day7 - B - Super A^B mod C FZU - 1759

    Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000000000,1<=B ...

  4. 【WPF学习】第二十二章 文本控件

    WPF提供了三个用于输入文本的控件:TextBox.RichTextBox和PasswordBox.PasswordBox控件直接继承自Control类.TextBox和RichTextBox控件间接 ...

  5. 054、Java中使用for循环第二种写法实现1~100的累加

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  6. MQ的调用

    mq调用(相关dll) using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Collecti ...

  7. chrome常用参数

    chrome禁止本地浏览时加载本地其他文件,可以采用添加启动参数的方式来支持 添加参数为 --allow-file-access-from-files 或者 --disable-web-securit ...

  8. Vue - 项目配置 ( element , 安装路由 , 创建路由 )

    1,安装element     :      vue add element 2,安装路由          :     vue add router 3,创建路由的过程  :   (1) 新建 vu ...

  9. xargs详细

    转自  http://czmmiao.iteye.com/blog/1949225 简介之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命 ...

  10. 利用创建的sa token来创建kubectl的config文件

    1.第一步 创建一sa,并授予需要的一个权限(需要授予的权限) 2.第二步 取步骤1中的sa的 secret的token文件并进行base64解码      echo "$TOKEN&quo ...