进度3_家庭记账本App_Fragment使用SQLite实现简单存储及查询
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_家庭记账本App
今天完成了昨天的初步构想,详细介绍见上一篇博客,具体项目结构和案例如下: MainActivity.java: package com.example.familybooks; import andr ...
- 进度5_家庭记账本App_数据库的添加和查看
今天继续在昨天的基础上完成了家庭记账单的在数据库中的添加和查看功能 在之前的基础上舍弃了Fragment,重新在百度上找到了学习资料,并且自我完成了实践 首先在之前的基础上创建CostListAdap ...
- 进度4_家庭记账本App
在上一个博客中,我学习了用Fragment进行数据的传值,但是出现了好多问题,我通过百度查阅资料发现fregment在进行数值传输的时候有的语法不能使用,并且不方便的进行数据库的使用,所以我在原来的家 ...
- 进度2_家庭记账本App
今天在昨天的基础上,相继完成了三个页面的布局和显示情况: 新增加的xml文件如下: activity_add.xml: <?xml version="1.0" encodin ...
- 家庭记账本app进度之关于tap的相关操作1
今天还主要学习关于怎样制作微信的先关的tap. 今天的主要成果是已经了解了相关的技术,以及相关的思路.代码经过一个下午的编写,基本接近尾声. 更详细的实验代码,以及相关的知识点将在明天完善后进行发表. ...
- 家庭记账本app进度之android中AlertDialog的相关应用以及对日期时间的相关操作(应用alertdialog使用的谈话框)
对于AlertDialog的相关知识: 1.创建构造器AlertDialog.Builder的对象: 2.通过构造器对象调用setTitle.setMessage.setIcon等方法构造对话框 ...
- 家庭记账本app进度之对于登录和注册两个界面点击按钮的相互跳转
这次主要完成了两个两个android页面之间的跳转.从登录页面点击注册就会跳转到注册页面.在注册页面点击返回登录,这样就可以返回到登录界面.主要是这样的操作.其中遇到了一个困难主要是当点击按钮的时候, ...
- 家庭记账本app进度之ui相关概念控制ui界面与布局管理
ui就是用户界面设计的意思. 首先是view,view相当于窗户上的玻璃. 1.android:id属性.android:id="@+id/user".他的id是user前面的@+ ...
- 家庭记账本app进度之下拉框和数字转轮的相关应用
这次主要是悬系的下拉框Spinner和数字转轮NumberPicker的使用.先分析相关的用到的知识点. 在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例子 ...
随机推荐
- 用 Python 编写一个天气查询应用
效果预览: 一.获取天气信息 使用python获取天气有两种方式. 1)是通过爬虫的方式获取天气预报网站的HTML页面,然后使用xpath或者bs4解析HTML界面的内容. 2)另一种方式是根据天气预 ...
- iPad适配tabBarController
iPad的tabBarController会在底部居中显示,根据不同的需求可能需要把tabBarItem均匀分布显示,具体修改如下 self.tabBar.itemPositioning = UITa ...
- u盘使用记录、痕迹删除技巧方法
在日常生活的使用U盘过程当中,系统会记录下大量U盘的使用记录信息,那么接下来小编就来同大家分享介绍如何删除掉这些使用记录的方法知识. 1. 往系统里面添加环境变量devmgr_shownonprese ...
- Quartz 调用
讲解 在线Cron表达式 调用(DLL下载) static void Main(string[] args) { //1.任务调度调用 //开启任务,操作数据,然后将数据广播给指定用户 //Cron表 ...
- 《机学一》特征工程1 ——文本处理:sklearn抽取、jieba中文分词、TF和IDF抽取
零.机器学习整个实现过程: 一.机器学习数据组成 特征值: 目标值: 二.特征工程和文本特征提取 1.概要: 1.特征工程是什么 2.特征工程的意义:直接影响预测结果 3.scikit-learn库 ...
- window下Apache Jmeter基础用法
1.下载Apache-jmeter-5.1.1.zip 2.解压到一个地方,就可以开始使用了,如果需要在CMD里快速打开,可以设置环境变量. 3.在bin里面,直接打开jmeter.bat. 可以修改 ...
- Python 操作 sqlite
代码示例 #导入sqlite3库 import sqlite3 #连接数据库 conn = sqlite3.connect("customers.db") #创建表,主键id自增 ...
- 将visual sdudio+Qt5.12 制作的程序打包成单个exe
在GitHub上下载了个qt程序,由于C++不太会,经过安装qt.修改编码等一系列操作终于可以运行了. 生成的exe在运行时依赖很多dll或者图片文件,直接拷贝到其他电脑上无法运行,可以将依赖的dll ...
- pwntool基础和ida常用操作
pwntools:http://www.91ri.org/14382.html ida:https://www.jianshu.com/p/d425140c6561
- Go语言 一维数组的使用
程序源码 package main import ( "fmt" // 导入 fmt 包,打印字符串是需要用到 ) func main() { // 声明 main 主函数 var ...