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

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

时间:2023-04-10 19:22:11浏览次数:52  
标签:cursor String 数据库 note NoteDatabase Android public 记事本

APP中的数据库

知识点

ListView

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

开发过程

需求

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

按照一定顺序显示出来

如果屏幕不够可以下拉

输入的内容可以增删改查

APP核心:ListView

ListView简介

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

ListView简单用法img

 

根据:

 

 

所以要创建一个结构,一个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);
    }
 }
 ​
 

 

 

 

 

 

 

 

 

标签:cursor,String,数据库,note,NoteDatabase,Android,public,记事本
From: https://www.cnblogs.com/zsc02/p/17304038.html

相关文章

  • Android开发_记事本(1)
    一些知识TextviewTextView中有下述几个属性:id:为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行相关属性的设置,又或者使用RelativeLayout时,参考组件用的也是id!layout_width:组件的宽度,一般写:wrap_content或者match_parent......
  • 2023很火的手机记事本APP
    在经济高速发展的今天,对于职场人士来说,时间是非常宝贵的,所以我们在工作中要时刻保持高效,能够准确的处理各种事项和工作任务。那么当工作中有很多信息需要记录、管理的时候,当有各种各样工作任务需要完成的时候,职场人士应该如何快速记录下来这些内容呢?  在2023年越来越多......
  • ChatGPT垂直行业私有数据知识库向量数据库-Linux Ubuntu下安装docker-并且安装运行qdr
    现在基于GPT相应实现自建本地知识库,必不可少的就是向量数据库,现在介绍下qdrant向量数据库的安装。因为qdrant向量数据库只支持docker部署,所以在服务器上安装一下docker,下面是在ubutnu下安装dockeraptupdateaptinstallapt-transport-httpsca-certificatescurlgnupglsb-r......
  • python操作mysql数据库
    Python操作mysql库python操作mysql数据库,需要使用第三库:pymysql一、mysql安装官网:https://www.mysql.com/二、安装pymysqlpipinstallPyMySql-ihttp://pypi.douban.com/simple/--trusted-hostpypi.douban.com三、使用代码演示:importpymysqlconn=pymysql.connec......
  • android-RecyclerView实现拖动排序
    android:RecyclerView实现拖动排序最近项目中需要实现对某一类条目进行拖动排序功能,实现技术方案就是利用ItemTouchHelper绑定RecyclerView、ItemTouchHelper.Callback来实现UI更新,并且实现动态控制是否开启拖动功能。其中,ItemTouchHelper是Google在support-v7包中添加的,其于Rec......
  • mysql数据库锁优化和注意 -- [转一篇很好的文章]
    为了保证数据的一致完整性,任何一个数据库都存在锁定机制。锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就成为了各种数据库的核心技术之一。本章将对MySQL中两种使用最为频繁的存储引擎MyISAM和Innodb各自的锁定机制进行较为详细的分析。......
  • 【MySQL】数据库基础
    1.什么是数据库数据库是用来存储数据的。那么我们之前学习过的存储数据可以使用文件,那么为什么还要弄个数据库呢?这就要谈谈用文件保存数据的几个缺点:文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便因此为了解决上述的问题,专家们设计出更利......
  • mysql - 在 MySQL 空间数据库中查找相交区域
    在MySQL数据库中,如何找到完全或部分落在距另一点一定距离内的圆形区域?有很多例子可以找到某个半径内的点,但没有找到与该半径相交的圆形区域。我有一份为某些区域(点和半径)提供服务的承包商列表。客户需要能够根据与他们的距离找到这些承包商。最佳答案我认为您正在寻找......
  • Oracle 11g R2创建数据库时,提示:要求在当前Oracle主目录中配置监听程序 必须运行Netca
    问题描述:    Oracle11gR2创建新的数据库时出现:使用DatabaseControl配置数据库时,要求在当前Oracle主目录中配置监听程序必须运行Netca以配置监听程序,然后才能继续。或者,可以选择继续,但不使用DatabaseControl配置。==================================================......
  • 数据库常用表说明(微至管家)
    用户相关信息mc_members:用户信息表(查手机号mobile)xcommunity_member:用户表(uid=mc_members.uid)mc_mapping_fans:粉丝表(uid=mc_members.uid)xcommunity_member_room:房号表xcommunity_member_bind:房号绑定表(memberid=xcommunity_member.id,addressid=room.id)手机端:$_W['uniaci......