最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

焦点速读:Android开发_记事本(2)数据库

来源:博客园

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 List getAllNotes(){    //访问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);   }}​

关键词: