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. 使用PYaudio录制音频和视频(自己)

    参考:https://blog.csdn.net/zhaoyun_zzz/article/details/84341801 音频录制:简洁版 import pyaudioimport waveimpo ...

  2. liunx mysql 5.7 二进制安装

    liunx 5.6版本 本人安装次数不下20次,基本上按照正常的操作流程不会出现什么问题,一切顺利. 今天开发新项目需要按照mysql 5.7 版本.mysql 5.7版本和mysql 5.6版本变化 ...

  3. pytesseract 识别率低提升方法

    pytesseract 识别率低提升方法 一.跟换识别语言包 下载地址https://github.com/tesseract-ocr/tessdata 二.修改图片的灰度 from PIL impo ...

  4. java中的几种单例模式

    目前比较常见的有4种(DCL为懒汉模式的线程安全版本). 单例模式的实现一般需要满足以下条件: 1.构造方法私有化,实例属性私有化. 2.必须仅在类的内部完成实例的初始化过程. 3.提供公共静态方法, ...

  5. java.io.IOException: Error: JSP Buffer overflow

    错误 jsp页面报错如下: Stacktrace: org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java ...

  6. POJ 1852:Ants

    Ants Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11754   Accepted: 5167 Description ...

  7. Exchange 2003 群集迁移 & SPS 2003 迁移、SQL Server 2000群集

    哈哈,本人自己写的文档,内容太多了,有195页,上传到Blog里面,应该是很难看的,排版也不太好. 记得下载时后改名字,用WinRAR解压合并. 第1章 迁移环境介绍 第2章 共享磁盘柜配置 第3章 ...

  8. 怎样解题 --解题表(how to solve it)

    <怎样解题> 美.波利亚 下面是来自书中的解题表: 理解题目 第一 理解题目 你必须理解题目 未知量是什么?已知数据是什么?条件是什么? 条件有可能满足吗?条件是否可以确定未适量?或者它不 ...

  9. Flutter如何引用第三方库并使用

    Flutter如何引用第三方库并使用 https://www.jianshu.com/p/bbda7794345e Flutter官网点击访问Flutter教程(一)Flutter概览Flutter教 ...

  10. 第四篇Django之模板语言

    Django之模板语言 一 模板的执行 模板的创建过程,对于模板,其实就是读取模板(其中嵌套着模板的标签),然后将Model中获取的数据插入到模板中,最后将信息返回给用户 def current_da ...