Android开发_记事本(2)数据库

APP中的数据库

知识点

ListView

https://blog.csdn.net/indeedes/article/details/119530068

开发过程

需求

可以写并保存多个输入的笔记内容

按照一定顺序显示出来

如果屏幕不够可以下拉

输入的内容可以增删改查

APP核心:ListView

ListView简介

​ 在Android开发中,ListView是一个比较常用的控件。它以列表的形式 展示具体数据内容,并且能够根据数据的长度自适应屏幕显示。

ListView简单用法img

根据:

image-20230402160000760

所以要创建一个结构,一个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<newVersion;i++){
            switch (i){
                case 1:
                    break;
                case 2:
                    updateMode(db);
                default:
                    break;
            }
        }*/

    }
}

实现增删改查(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<Note> getAllNotes(){
        //访问table下的所有数据
        Cursor cursor = db.query(NoteDatabase.TABLE_NAME,columns,null,null,null,null,null);

        List<Note> 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);
    }
}

posted @ 2023-04-10 19:18  张少春02  阅读(81)  评论(0编辑  收藏  举报
Title