【Android Studio】学习——数据存储管理

AndroidStudio实验——数据存储管理


文章目录

  • AndroidStudio实验——数据存储管理
    • @[toc]
    • 一:实验目标和实验内容:
    • 二:数据库的CRUD操作
      • 【一】创建(Create)
      • 【2】读取(Read)
      • 【3】更新(Update)
      • 【4】删除(Delete)
    • 三:实验结果:(实验小结与结果截图)
      • 1、功能说明与核心代码
        • 核心代码截图(FileMainActivity.java):
        • layout布局文件(activity_file_main.XML)
      • 2,功能说明
        • 【1】button1
        • 【2】button2
        • 【3】button3
        • 【4】button4
        • 【5】button5
        • 【6】button6
        • 【7】button7
        • 【8】button8
        • 【9】button9
        • 【10】button10
    • 四:实验小结

一:实验目标和实验内容:

1,掌握数据存储的基本概念,能编写数据存储过程。

2、掌握SQLITE的基本概念,能实现基础CRUD操作。

SQLite是一种轻量级的数据库管理系统,它被广泛用于移动应用和桌面应用中。SQLite数据库是一个服务器进程,它存储在一个单一的磁盘文件中。

3、需实现的具体功能为:数据的标准增、删、改、查操作。

二:数据库的CRUD操作

【一】创建(Create)

(1)创建数据库:

在Android中,SQLite数据库通常由SQLiteOpenHelper的子类创建和管理。

public class DatabaseHelper extends SQLiteOpenHelper {
  private static final String DATABASE_NAME = "myDatabase.db";
  private static final int DATABASE_VERSION = 1;
  @Overridejava
  public void onCreate(SQLiteDatabase db) {
   db.execSQL("CREATE TABLE IF NOT EXISTS users (" +
       "id INTEGER PRIMARY KEY AUTOINCREMENT," +
          "name TEXT," +
          "age INTEGER)");
  }
  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS users");
    onCreate(db);
  }
}

(2)插入数据:

使用insert()方法向表中插入新行。

SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "zjy");
values.put("age", 20);
long newRowId = db.insert("users", null, values);

【2】读取(Read)

(1)查询数据:

使用query()方法从表中检索数据。

Cursor cursor = db.query("users", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
  do {
    String name = cursor.getString(cursor.getColumnIndex("name"));
    int age = cursor.getInt(cursor.getColumnIndex("age"));
    // 使用数据...
  } while (cursor.moveToNext());
}
cursor.close();

【3】更新(Update)

更新数据:

使用update()方法修改表中的现有行。

ContentValues updateValues = new ContentValues();
updateValues.put("age", 31);
int rowsUpdated = db.update("users", updateValues, "name = ?", new String[]{"zjy"});

【4】删除(Delete)

删除数据:

使用delete()方法从表中删除行。

int rowsDeleted = db.delete("users", "name = ?", new String[]{"zjy"});

三:实验结果:(实验小结与结果截图)

1、功能说明与核心代码

核心代码截图(FileMainActivity.java):

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

layout布局文件(activity_file_main.XML)

在这里插入图片描述

2,功能说明

【1】button1

点击此按钮会将键值对"name"和"zjy",以及"key"和"123456"保存到SharedPreferences中,并在日志中打印出保存的"name"值。

说明:点击button,存入事先写入的数据

button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sp.edit()
                        .putString("name","zjy")
                        .putString("key","123456")
                        .commit();
                Log.d("zjy","Data saved "+sp.getString("name","default"));


            }
        });

实验结果:

在这里插入图片描述

【2】button2

点击此按钮会从SharedPreferences中读取"name"的值,并将其设置为textView1的文本。

说明:读出button1存入的数据

核心代码:

 button2.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                textView1.setText(sp.getString("name","123"));
            }
        });

实验结果截图:

在这里插入图片描述

【3】button3

点击此按钮会尝试打开一个FileOutputStream来写入文件zjyfile.txt,写入字符串"hello"。

核心代码:

 button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                  outputStream=new FileOutputStream(file);
                } catch (FileNotFoundException e) {
                    throw new RuntimeException(e);
                }
                try {
                    outputStream.write("hello".getBytes());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        });

实验结果截图:

在这里插入图片描述

【4】button4

点击此按钮会尝试打开一个FileInputStream来读取文件zjyfile.txt,并使用BufferedReader读取第一行文本,然后将文件的编码和第一行文本设置为textView1的文本。

核心代码:

button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               /* sp.edit()
                        .putString("name","zjy")
                        .putString("key","123456")
                        .commit();
                Log.d("zjy","Data saved "+sp.getString("name","default"));*/
                try {
                    FileInputStream inputStream=new FileInputStream(file);
                } catch (FileNotFoundException e) {
                    throw new RuntimeException(e);
                }
                try {
                    inputStream=new FileInputStream(file);
                    InputStreamReader reader=new InputStreamReader(inputStream);
                    str1= reader.getEncoding();
                    //fileReader=new FileReader(file);
                    BufferedReader bufferedReader=new BufferedReader(reader);
                    str2=bufferedReader.readLine();

                } catch (IOException e) {
                    throw new RuntimeException(e);
                }

                textView1.setText(str1+"/"+str2);
            }
        });

实验结果截图:

在这里插入图片描述

【5】button5

点击此按钮会创建一个Person对象,并使用ContentValues将该对象的信息插入到数据库中。这里使用的是自定义的MyDAO类来处理数据库操作。

核心代码:

  button5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Person person=new Person("zhangsan",20);
                ContentValues values1=new ContentValues();
                values1.put("name",person.name);
                values1.put("age",person.age);
                //db.insert("person",null,values1);
                myDAO.Myinsert(values1);

            }
        });

实验结果截图:

在这里插入图片描述

【6】button6

点击此按钮会从数据库中删除所有age字段为"18"的记录。

核心代码:

  button6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                db.delete("person","age=?",new String[]{"20"});

            }
        });

实验结果截图:

在这里插入图片描述

【7】button7

点击此按钮会更新数据库中所有age字段为"18"的记录,这里使用的是自定义的MyDAO类来处理更新操作。

核心代码:

 button7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*Person person=new Person("zahngsan",18);
                ContentValues values1=new ContentValues();
                //values1.put("name",person.name);
                values1.put("age",person.age);
                db.update("person",values1,"name=? AND age=?",new String[]{"zhangsan","20"});
*/

                myDAO.Myupdate();
            }
        });

实验结果截图:

在这里插入图片描述

【8】button8

点击此按钮会查询数据库中所有age字段为"20"的记录。

核心代码:

 button8.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Cursor cursor=db.query("person",null,
                        "age=?",new String[]{"20"},
                        null,null,null);


            }
        });

实验结果截图:

在这里插入图片描述

【9】button9

点击此按钮会查询数据库中所有名为"zhangsan"的记录,并将结果传递给另一个活动SqlrecycleviewActivity。

核心代码:

 button9.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //StringBuilder stringBuilder=myDAO.MyqueryAll("zhangsan");
                //textView1.setText(stringBuilder);
                Intent intent=new Intent(
                        FileMainActivity.this,SqlrecycleviewActivity.class);

                list1=myDAO.MyqueryAll("zhangsan");

                intent.putExtra("data",list1);
                startActivity(intent);
            }
        });

实验结果截图:

在这里插入图片描述

【10】button10

点击此按钮会使用Glide库从网络加载一个图片,并将其设置到imageView中。“https://www.httpbin.org/image/png”

核心代码:

 button10.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Glide.with(context)
                        .load("https://www.httpbin.org/image/png")
                        .into(imageView);
            }
        });

实验结果截图:

在这里插入图片描述

四:实验小结

button5、button6、button7和button8涉及了SQLite数据库的CRUD操作。这些操作通过自定义的MyDAO类实现,展示了如何将对象数据模型映射到数据库表,并执行插入、删除、更新和查询操作。

实验中使用了ContentValues来传递数据,这是Android提供的一个方便的类,用于将数据插入或更新到数据库中。

button10演示了如何使用Glide库从网络加载图片。这是一个常见的需求,尤其是在需要显示网络图片的应用中。需要注意的是,URL字符串的正确性对于成功加载图片至关重要。

写在最后:

也许登上这一座山,又望见更高的山,人畏惧困难便容易自困,但殊不知行走的过程,每一步都足矣丰盈此生。所以,尽量的学习,尽量的尽力,尽量的旅游,尽量的吃好东西,人生就比较美好一点点,就是这么简单。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/935853.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

科研绘图系列:R语言绘制热图和散点图以及箱线图(pheatmap, scatterplot boxplot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载图1图2图3系统信息参考介绍 R语言绘制热图和散点图以及箱线图(pheatmap, scatterplot & boxplot) 加载R包 library(magrittr) library(dplyr) library(ve…

【Qt】信号、槽

目录 一、信号和槽的基本概念 二、connect函数:关联信号和槽 三、自定义信号和槽 1.自定义槽函数 2.自定义信号函数 例子: 四、带参的信号和槽 例子: 五、Q_OBJECT宏 六、断开信号和槽的连接 例子: 一、信号和槽的基本…

一种构建网络安全知识图谱的实用方法

文章主要工作 论述了构建网络安全知识库的三个步骤,并提出了一个构建网络安全知识库的框架;讨论网络安全知识的推演 1.框架设计 总体知识图谱框架如图1所示,其包括数据源(结构化数据和非结构化数据)、信息抽取及本体构建、网络…

JAVA后端实现全国区县下拉选择--树形结构

设计图如图&#xff1a; 直接上代码 数据库中的格式&#xff1a; JAVA实体类&#xff1a; Data public class SysAreaZoningDO {private Long districtId;private Long parentId;private String districtName;private List<SysAreaZoningDO> children; } MapperSQL语句…

青少年夏令营管理系统的设计与开发(社团管理)(springboot+vue)+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

安卓低功耗蓝牙BLE官方开发例程(JAVA)翻译注释版

官方原文链接 https://developer.android.com/develop/connectivity/bluetooth/ble/ble-overview?hlzh-cn 目录 低功耗蓝牙 基础知识 关键术语和概念 角色和职责 查找 BLE 设备 连接到 GATT 服务器 设置绑定服务 设置 BluetoothAdapter 连接到设备 声明 GATT 回…

Windows 系统中的组策略编辑器如何打开?

组策略是 Windows 操作系统中用于设置计算机和用户配置的重要工具。它允许管理员控制各种系统功能&#xff0c;从桌面背景到安全设置等。对于 Windows 专业版、企业版和教育版用户来说&#xff0c;可以通过组策略编辑器&#xff08;Group Policy Editor&#xff09;来管理这些设…

MySQL删除外键报错check that column/key exists

在我们删除外键的时候&#xff0c;报了check that column/key exists这个错误&#xff0c;这是因为你的外键名字没写对&#xff0c;我们以为我们写的字段名就是我们的外键其实并不是&#xff0c;我们可以通过show create table[ ]来查看外键的名字 所以删除外键的时候应该这样…

python学opencv|读取图像(十)用numpy创建彩色图像

【1】引言 前序文章中&#xff0c;我们已经学会了用numpy规划数据控制像素大小&#xff0c;然后用像素规划矩阵&#xff0c;对矩阵赋值后输出灰度图&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;八&#xff09;用numpy创建纯黑灰度图-CSDN博客 p…

线程池(ThreadPoolExecutor)

目录 一、线程池 标准提供的线程池 ThreadPoolExecutor 自定义线程池 一、线程池 为什么要引入线程池? 这个原因我们需要追溯到线程&#xff0c;我们线程存在的意义在于&#xff0c;使用进程进行并发编程太重了&#xff0c;所以引入了线程&#xff0c;因为线程又称为 “轻…

hbase读写操作后hdfs内存占用太大的问题

hbase读写操作后hdfs内存占用太大的问题 查看内存信息hbase读写操作 查看内存信息 查看本地磁盘的内存信息 df -h查看hdfs上根目录下各个文件的内存大小 hdfs dfs -du -h /查看hdfs上/hbase目录下各个文件的内存大小 hdfs dfs -du -h /hbase查看hdfs上/hbase/oldWALs目录下…

【IntelliJ IDEA 集成工具】TalkX - AI编程助手

前言 在数字化时代&#xff0c;技术的迅猛发展给软件开发者带来了更多的挑战和机遇。为了提高技术开发群体在繁多项目中的编码效率和质量&#xff0c;他们需要一个强大而专业的工具来辅助开发过程&#xff0c;而正是为了满足这一需求&#xff0c;TalkX 应运而生。 一、概述 1…

vue2+element-ui实现多行行内表格编辑

效果图展示 当在表格中点击编辑按钮时:点击的行变成文本框且数据回显可以点击确定按钮修改数据或者取消修改回退数据: 具体实现步骤 1. 行数据定义编辑标记 行数据定义编辑标记 当在组件中获取到用于表格展示数据的方法中,针对每一行数据添加一个编辑标记 this.list.f…

React 第十六节 useCallback 使用详解注意事项

useCallback 概述 1、useCallback 是在React 中多次渲染缓存函数的 Hook&#xff0c;返回一个函数的 memoized的值&#xff1b; 2、如果多次传入的依赖项不变&#xff0c;那么多次定义的时候&#xff0c;返回的值是相同的,防止频繁触发更新&#xff1b; 3、多应用在 父组件为函…

【智体OS】官方上新发布智体机器人:使用rtrobot智体应用远程控制平衡车机器人

【智体OS】官方上新发布智体机器人&#xff1a;使用rtrobot智体应用远程控制平衡车机器人 dtns.network是一款主要由JavaScript编写的智体世界引擎&#xff08;内嵌了three.js编辑器的定制版-支持以第一视角浏览3D场馆&#xff09;&#xff0c;可以在浏览器和node.js、deno、e…

Windows系统VSCode 搭建ESP-IDF环境

VS Code&#xff0c;安装ESP-IDF插件 快捷键CTRLSHIFTP&#xff0c;弹出显示所有命令的窗口&#xff0c;选择ESP-IDF的欢迎 使用第一个选项&#xff0c;要选择一个ESP-IDF版本&#xff0c;选最新的就行 点击Install,等待下载 提示安装成功&#xff0c;如果过程中出现python已存…

PR裁剪与删除

剪切 剪切片段 工具面板的第四个工具&#xff0c;剃刀工具&#xff0c;在英文输入法下可以使用快捷键C来切换&#xff0c;或者直接使用CtrlK进行裁剪。 CtrlK&#xff1a;选中剪辑后会在指针处进行裁剪。 剃刀工具&#xff1a;在执行位置剪裁&#xff0c;包括连接在一起的素材…

基于物联网的 AI 智能送药车与自维护基站系统研究

一、引言 &#xff08;一&#xff09;研究背景 随着科技的飞速发展&#xff0c;物联网技术在各个领域都展现出了巨大的潜力。在医疗领域&#xff0c;物联网技术的应用为提高医疗服务的效率和质量带来了新的机遇。其中&#xff0c;基于物联网的 AI 智能送药车与自维护基站系统…

TÜLU 3: Pushing Frontiers inOpen Language Model Post-Training

模型&#xff1a;https://huggingface.co/allenai 技术报告&#xff1a;https://allenai.org/papers/tulu-3-report.pdf 数据集&#xff1a;https://huggingface.co/collections/allenai/tulu-3-datasets-673b8df14442393f7213f372 GitHub&#xff1a;https://github.com/al…

123213124

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…