AddFragment.java:

  1. package com.example.familybooks;
  2.  
  3. import android.content.ContentValues;
  4. import android.database.Cursor;
  5. import android.database.sqlite.SQLiteDatabase;
  6. import android.os.Bundle;
  7.  
  8. import androidx.annotation.Nullable;
  9. import androidx.fragment.app.Fragment;
  10.  
  11. import android.util.Log;
  12. import android.view.LayoutInflater;
  13. import android.view.View;
  14. import android.view.ViewGroup;
  15. import android.widget.Button;
  16. import android.widget.DatePicker;
  17. import android.widget.EditText;
  18. import android.widget.Toast;
  19.  
  20. public class AddFragment extends Fragment {
  21. @Nullable
  22. String TAG="TAG";
  23. private EditText costTitle,costMoney;
  24. private Button btn_go,btn_return;
  25. private DatePicker costDate;
  26. private SQLiteDatabase database;
  27. DatabaseHelper helper;
  28.  
  29. @Override
  30. public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
  31. View view=inflater.inflate(R.layout.activity_add,container,false);
  32. return view;
  33. }
  34.  
  35. public void onActivityCreate(Bundle savedInstanceState){
  36. super.onActivityCreated(savedInstanceState);
  37.  
  38. costTitle=(EditText)getActivity().findViewById(R.id.et_costtitle);
  39. costMoney=(EditText)getActivity().findViewById(R.id.et_costmoney);
  40. costDate=(DatePicker) getActivity().findViewById(R.id.dp_costdate);
  41.  
  42. helper=new DatabaseHelper(getActivity(),"account_cost",null,1);
  43.  
  44. btn_go=(Button)getActivity().findViewById(R.id.btn_go);
  45. btn_go.setOnClickListener(new View.OnClickListener() {
  46. @Override
  47. public void onClick(View v) {
  48. Toast.makeText(getActivity(),"accoun_cost",Toast.LENGTH_LONG).show();
  49. database=helper.getWritableDatabase();
  50. Insert();
  51.  
  52. costTitle.setText("");
  53. //costDate.setText("");
  54. costMoney.setText("");
  55. Toast.makeText(getActivity(),"accoun_cost",Toast.LENGTH_LONG).show();
  56. }
  57. });
  58.  
  59. btn_return=(Button)getActivity().findViewById(R.id.btn_return);
  60. btn_return.setOnClickListener(new View.OnClickListener() {
  61. @Override
  62. public void onClick(View arg0) {
  63. //得到数据库
  64. database=helper.getWritableDatabase();
  65. //查询数据
  66. Query();
  67.  
  68. Toast.makeText(getActivity(),"accoun_cost",Toast.LENGTH_LONG).show();
  69. }
  70. });
  71.  
  72. }
  73. public void Query(){
  74. Cursor cursor=database.query("account_cost",null,null,null,null,null,null);
  75. if(cursor.moveToFirst()){
  76. do{
  77. String title=cursor.getString(cursor.getColumnIndex("title"));
  78. String date=cursor.getString(cursor.getColumnIndex("date"));
  79. String money=cursor.getString(cursor.getColumnIndex("money"));
  80. Log.i(TAG,"title:"+title);
  81. Log.i(TAG,"date:"+date);
  82. Log.i(TAG,"money:"+money);
  83. }while(cursor.moveToNext());
  84. }
  85. cursor.close();
  86. }
  87.  
  88. public void Insert(){
  89. ContentValues values=new ContentValues();
  90. values.put("title",costTitle.getText().toString());
  91. values.put("date",costTitle.getText().toString());
  92. values.put("money",costMoney.getText().toString());
  93. database.insert("account_cost",null,values);
  94. }
  95. }

DatabaseHelper.java:

  1. package com.example.familybooks;
  2.  
  3. import android.content.ContentValues;
  4. import android.content.Context;
  5. import android.database.Cursor;
  6. import android.database.sqlite.SQLiteDatabase;
  7. import android.database.sqlite.SQLiteOpenHelper;
  8.  
  9. import androidx.annotation.Nullable;
  10.  
  11. public class DatabaseHelper extends SQLiteOpenHelper {
  12.  
  13. private Context context;
  14. public DatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
  15. super(context,"account_daily",null, 1);
  16. this.context=context;
  17. }
  18.  
  19. @Override
  20. public void onCreate(SQLiteDatabase db) {
  21. db.execSQL("create table diary(id integer PRIMARY KEY AUTOINCREMENT,"
  22.  
  23. +"costTitle text,costDate text,costMoney text)");
  24.  
  25. }
  26.  
  27. @Override
  28. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  29.  
  30. db.execSQL("drop table if exists diary");
  31. onCreate(db);
  32. }
  33. }

总结:

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. Visual Studio中的“build”、“rebuild”、“clean”的区别

    区别 rebuild基本相当于clean+build build只针对修改过的文件进行编译,rebuild会对所有文件编译(无论是否修改). clean 删除中间和输出文件,中间文件是指一些生成应用的 ...

  2. CentOS下安装Orcale

    以前没有安装过,最近安装了.感觉在Liunx安装真的超麻烦.这是技术文档,分享给大家. LINUX安装oracle数据库步骤: 1.安装依赖包    yum -y install  gcc gcc-c ...

  3. liunx mysql 5.7 二进制安装

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

  4. VUE- 访问服务器端数据 axios

    VUE- 访问服务器端数据 axios 一,安装 npm install axios 二,在http.js中引入 import axios from 'axios'; 三,定义http request ...

  5. apache端口修改为80

    apache端口莫名改变为443,访问网址失败,修改Apache端口: 1.打开目录(实际而定): C:\xampp\apache\conf 编辑httpd.conf 2.ctrl + f  搜索li ...

  6. pom.xml报unknown error

    1. 从https://start.spring.io/的spring initializr生成demo,使用默认的2.1.6.release(2019年7月10日) 2. 在eclipse加载后,p ...

  7. Day 25:XML解析

    XML解析 xml文件除了给开发者看,更多的情况使用程序读取xml文件的内容.这叫做xml解析 XML解析方式(原理不同) DOM解析 SAX解析 XML解析工具 DOM解析原理: JAXP (ora ...

  8. ROS常用库(一) fake_localization

    wiki是最好的学习资料,以下直接参考了wiki官网.另外po出官网网址,建议英语较好的朋友之接看原版 http://wiki.ros.org/fake_localization 概述 fake_lo ...

  9. Java笔记: protected的真正含义

    关于protected关键字,即使是Java初学者也能够说出它的含义:protected修饰的成员可以被子类访问.但是这样理解并不完全准确,下面考虑它的真正含义. Java访问控制回顾 Java语言定 ...

  10. 二十三、JavaScript之html事件

    一.代码如下 二.效果如下 三.点击之后 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" ...