APP中的数据库
知识点
ListView
https://blog.csdn.net/indeedes/article/details/119530068
开发过程
需求
可以写并保存多个输入的笔记内容
(资料图片)
按照一定顺序显示出来
如果屏幕不够可以下拉
输入的内容可以增删改查
APP核心:ListView
ListView简介
在Android开发中,ListView是一个比较常用的控件。它以列表的形式 展示具体数据内容,并且能够根据数据的长度自适应屏幕显示。
ListView简单用法
根据:
所以要创建一个结构,一个class
需要创建一个数据库来保存笔记,以此来保证之前的内容不被覆盖
先创建一个Note Class
package com.example.note;public class Note { private long id; //数据库中每篇笔记独一无二的标识(自动增长) private String content; //内容 private String time; //时间(创建or编辑) private int tag; //为了分类笔记的标签(娱乐,运动,学习等) //构造函数 没什么用但要有 public Note(){ } //同时必须有一个详细的constractor //因为id需要有自增长的特性,在数据库里面对他进行设置,所以下面不需要初始化 public Note(String content,String time,int tag){ this.content = content; this.time = time; this.tag = tag; } //接下来是他们的getter和setter,规范化 public long getId() {return id;} public String getContent() {return content;} public String getTime() {return time;} public int getTag() {return tag;} public void setId(long id) {this.id = id;} public void setContent(String content) {this.content = content;} public void setTime(String time) {this.time = time;} public void setTag(int tag) {this.tag = tag; } //重写toString的格式,简洁,方便debug @Override public String toString(){ return content +"\n"+time.substring(5,16)+" "+id; }}
接下来需要将它往数据库里面传,还需要另一个Class CRUD(增删改查)
但要先创建数据库
创建一个数据库NoteDatabase
代码:
package com.example.note;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class NoteDatabase extends SQLiteOpenHelper{ //定义全局常量,方便命名、debug时候修改 public static final String TABLE_NAME = "notes"; public static final String CONTENT = "content"; public static final String ID = "_id"; public static final String TIME = "time"; public static final String MODE = "mode"; //写一个constractor //context:上下文 //version:代码更改、升级时改变版本号 public NoteDatabase(Context context) { super(context,"notes",null,1); } @Override public void onCreate(SQLiteDatabase db){ //下面的function是执行SQL语句 db.execSQL("CREATE TABLE "+TABLE_NAME +"(" +ID + " INTEGER PRIMARY KEY AUTOINCREMENT," //实现自增长 +CONTENT +"TEXT NOT NULL," //笔记内容,非空 +TIME + "TEXT NOT NULL," //时间 非空 +MODE + "INTEGER DEFAULT 1)" //标签,默认1 ); } //升级依靠的function //检测已有的版本和新的版本,如果不相等则调用下面的function @Override public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ /*for(int i = oldVersion;i实现增删改查(CRUD)
package com.example.note;import android.annotation.SuppressLint;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import java.util.ArrayList;import java.util.List;public class CRUD { SQLiteOpenHelper dbHandler; //数据库处理器 SQLiteDatabase db; //数据库 //首先要知道数据库长什么样子 //把数据库中每一列列举出来组成一个数组,方便对其操作 private static final String[] columns = { NoteDatabase.ID, NoteDatabase.CONTENT, NoteDatabase.TIME, NoteDatabase.MODE }; //constractor public CRUD(Context context){ dbHandler = new NoteDatabase(context); //初始化,dbHandler 指向 NoteDatabase,并传入context } public void open(){ db = dbHandler.getWritableDatabase(); //数据库处理器写入模式,往数据库中写文件 } public void close(){ dbHandler.close(); //关闭数据库处理器 } //核心function之一,添加笔记,把note添加到database public Note addNote(Note note){ //add a note object to database ContentValues contentValues = new ContentValues(); //一个专门处理数据的一个类,初始化 contentValues.put(NoteDatabase.CONTENT,note.getContent()); //将参数二获取到的内容放到参数一中 contentValues.put(NoteDatabase.TIME,note.getTime()); contentValues.put(NoteDatabase.MODE,note.getTag()); //插入一个contentValues,返回一个long类型的数据库的id long insertId = db.insert(NoteDatabase.TABLE_NAME,null,contentValues); //将id设置为刚才返回的id note.setId(insertId); //返回note return note; } //核心之二, public Note getNote(long id){ //get a note from database using cursor index //cursor :游标|指针 //query:database的查询语句(固定格式,死记硬背) Cursor cursor = db.query(NoteDatabase.TABLE_NAME,columns,NoteDatabase.ID + "=?", new String[]{String.valueOf(id)},null,null,null,null ); if(cursor != null) //找到了 { cursor.moveToFirst(); //移到最前面 } //创建了一个新note,把之前的覆盖,一个浅复制 Note e = new Note(cursor.getString(1),cursor.getString(2),cursor.getInt(3)); return e; } //方便我们操作的function //获取数据库中所有的notes,返回得到一个List @SuppressLint("Range") public ListgetAllNotes(){ //访问table下的所有数据 Cursor cursor = db.query(NoteDatabase.TABLE_NAME,columns,null,null,null,null,null); List notes = new ArrayList<>(); if(cursor.getCount()>0){ //while:不断地往List里面添加数据 while(cursor.moveToNext()){ Note note = new Note(); note.setId(cursor.getLong(cursor.getColumnIndex(NoteDatabase.ID))); note.setContent(cursor.getString(cursor.getColumnIndex(NoteDatabase.CONTENT))); note.setTime(cursor.getString(cursor.getColumnIndex(NoteDatabase.TIME))); note.setTag(cursor.getInt(cursor.getColumnIndex(NoteDatabase.MODE))); notes.add(note); } } return notes; } //更新和删除 public int updateNote(Note note){ ContentValues values = new ContentValues(); values.put(NoteDatabase.CONTENT,note.getContent()); values.put(NoteDatabase.TIME,note.getTime()); values.put(NoteDatabase.MODE,note.getTag()); return db.update(NoteDatabase.TABLE_NAME,values, NoteDatabase.ID + "=?", new String[]{String.valueOf(note.getId())} ); } public void removeNote(Note note){ db.delete(NoteDatabase.TABLE_NAME,NoteDatabase.ID + "=" +note.getId(),null); }} 关键词: