我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android数据存储基础:

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android数据存储基础:

1.基础:

1.1.Android 数据存储路径:
内部存储:
 /data/data/packageName/databases: 数据库
 /data/data/packageName/file:   内部存储
 /data/data/packageName/shared_prefs :  sp键值对存储

 sdcard下:
 /storage/sdcard/Android/data/packageName  : 应用卸载时删除,sd对应应用包的内部存储
 /storage/sdcard/xxx    : 应用卸载时不删除,6.0需要权限

模拟器类型必须是Google APIc才有root权限可以查看data/data目录

2. shared_prefs Api 键值对使用

// /data/data/packageName/shared_prefs
    private SharedPreferences sp;
    public void  spOperator(View view){
        //1. 得到sp对象
        sp = getSharedPreferences("atguigu", Context.MODE_PRIVATE);
        //2. 得到editor对象
        SharedPreferences.Editor edit = sp.edit();
        // 3. sp 存储数据
        edit.putString("username", "xiaoming").commit();
        // 4. sp  读取数据
        String str=sp.getString("username","");
        Log.e("denganzhi1",str);
    }
3. 安卓内部存储file

 // /data/data/packageName/file   安卓内部存储默认
    public void writeImgage(View view) throws IOException {
        AssetManager manager = getAssets();
        // 会自动去assert目录下找
        InputStream is = manager.open("a.txt");
        // 会自动打开 /data/data/packageName/file 目录
        FileOutputStream fos = openFileOutput("a.txt", Context.MODE_PRIVATE);
        //3. 边读边写
        byte[] buffer = new byte[1024];
        int len = -1;
        while((len=is.read(buffer))!=-1) {
            fos.write(buffer, 0, len);
        }
        fos.close();
        is.close();
    }
    public void readImgage(View view) throws IOException {
        // 获取路径
        // /data/data/packageName/file 目录
        String filesPath = getFilesDir().getAbsolutePath()+"/a.txt";
        BufferedReader reader=new BufferedReader(new FileReader(filesPath));
        String line=null;
        while(null!=(line=reader.readLine())){
            Log.e("line:",line);
        }
      reader.close();
    }
4. sd对应应用包的内部存储


    //  /storage/emulated/0/Android/data/com.example.myapplication/files  : 应用卸载时删除
    public void  writeSD(View view) throws IOException {
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            String filesPath = getExternalFilesDir(null).getAbsolutePath();
            Log.e("path:",filesPath);
            // : /storage/emulated/0/Android/data/com.example.myapplication/files
            String filePath = filesPath+"/"+"a.txt";
            FileOutputStream fos = new FileOutputStream(filePath);
            fos.write("写sdcard".getBytes("utf-8"));
            fos.close();
        }
    }
    public void  readSD(View view) throws IOException {
        // 1. 判断sd卡状态, 如果是挂载的状态才继续, 否则提示
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {
            String filesPath = getExternalFilesDir(null).getAbsolutePath()+"/a.txt";
            FileInputStream fis = new FileInputStream(filesPath);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = -1;
            while((len=fis.read(buffer))!=-1) {
                baos.write(buffer, 0, len);
            }
            String content = baos.toString();
            Log.e("readSD-->content:",content);
            baos.close();
            fis.close();
        }
    }
5.   sd外部存储

    

  // 权限回调   
@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
    {
        if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE)
        {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
                try {
                    writeSdOut();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else
            {
                // Permission Denied
                Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
            }
            return;
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
//  写入SD卡内容
  public static int MY_PERMISSIONS_REQUEST_CALL_PHONE=100;
    public void  writeSDW(View view)  {
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED)
        {
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},MY_PERMISSIONS_REQUEST_CALL_PHONE);
        } else
        {
            try {
                writeSdOut();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 public void writeSdOut() throws IOException {
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            // /storage/emulated/0
            String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
            Log.e("sdPath:",sdPath);
            //   /storage/emulated/0
            File file = new File(sdPath+"/atguigu");
            if(!file.exists()) {
                file.mkdirs();//创建文件夹
            }
            String filePath = sdPath+"/atguigu/"+"a.txt";
            FileOutputStream fos = new FileOutputStream(filePath);
            //4. 写数据
            fos.write("sd卡外部存储".getBytes("utf-8"));
            fos.close();
        }
    }
//  读取SD卡内容
 public void  readSDW(View view) throws IOException {
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.CALL_PHONE)
                != PackageManager.PERMISSION_GRANTED) {
            String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
            //   /storage/emulated/0
            File file = new File(sdPath+"/atguigu");
            String filePath = sdPath+"/atguigu/"+"a.txt";
            Log.e("sdPath:",sdPath);
            FileInputStream fis = new FileInputStream(filePath);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = -1;
            while((len=fis.read(buffer))!=-1) {
                baos.write(buffer, 0, len);
            }
            String content = baos.toString();
            Log.e("readSDW-->content:",content);
            fis.close();
        }
    }
6. sqlite数据库存储

路径: /data/data/packageName/datebases
联系人App的数据库路径: data/data/com.android.prividers.contacts
打开导出本地.sqlite数据工具: SQLite Expert

     6.1. 数据库基本操作:

工具:Sqlite Expert Personal3 查看 .sqlite数据库,常用sql语句

## 建表
create table employee( 
       _id integer primary key autoincrement,    
       name varchar,
       salary double,
       birthday date
)   

##  插入数据
insert into employee(name,salary,birthday) values("Tom",100000,"1994-12-12");

##  删除数据
delete from employee where _id=1

## 更新数据
update employee set name="xiaozhang" where _id=2;

## 查找
select * from employee where  _id=2;


使用adb命令查看:

     adb shell
     cd /data/data
     cd com.android.providers.contacts 
     cd databases
     sqlite3 contacts2.db
     .tables :查看所有表
     select * from data; 

6.2. Android Api对sqlite数据库操作

基础类:


package com.example.myapplication;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHelper extends SQLiteOpenHelper {
	public DBHelper(Context context,int version) {
		super(context, "atguigu.db", null, version);
	}
	
	@Override
	public void onCreate(SQLiteDatabase db) {
		Log.e("TAG", "DBHelper onCreate()");
		//建表
		String sql = "create table person(_id integer primary key autoincrement, name varchar,age int)";
		db.execSQL(sql);
		//插入一些初始化数据
		db.execSQL("insert into person (name, age) values ('Tom1', 11)");
		db.execSQL("insert into person (name, age) values ('Tom2', 12)");
		db.execSQL("insert into person (name, age) values ('Tom3', 13)");
	}
	//当传入的版本号大于数据库的版本号时调用
	// 用户版本升级
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		Log.e("TAG", "DBHelper onUpgrade()-->"+"oldVersion:"+oldVersion + "newVersion:"+newVersion);
	}
    // 还有版本下降的时候调用的方法onDowngrade
}

 6.2.1. 创建数据库:


   
    public void  creatTable(View view){
     DBHelper dbHelper=new DBHelper(this,1);
        // 创建数据源库
    //    dbHelper.getWritableDatabase();  //本地空间满了如果,继续插入没有反应
        // 连接数据库,得到连接
      SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();  // 本地空间满了如果,继续插入抛异常
    }

  6.2.2.  更新数据库版本


   public void updateTable(View view){
        DBHelper dbHelper=new DBHelper(this,2);
        // 连接数据库才会更新
        // 回调 onUpgrade 回调方法,比如更新一些字段
        SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();
    }

  6.2.3. 数据的插入、修改、删除、查询


public void insertFun(View view){
        DBHelper dbHelper=new DBHelper(this,2);
        SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();
        //insert into person (name, age) values ('Tom1', 11)
        ContentValues contentValues=new ContentValues();
        contentValues.put("name","denganzhi");
        contentValues.put("age",25);
       long id= sqLiteDatabase.insert("person",null,contentValues);
        sqLiteDatabase.close();
        Toast.makeText(MainActivity.this,"longid:"+id,Toast.LENGTH_SHORT).show();
    }
    public void updateFun(View view){
        DBHelper dbHelper=new DBHelper(this,2);
        SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();
        ContentValues contentValues=new ContentValues();
        contentValues.put("age","300000");
        int updateCount=sqLiteDatabase.update("person",contentValues,"_id=?",new String[]{"5"});
        sqLiteDatabase.close();
        Toast.makeText(MainActivity.this,"updateCount:"+updateCount,Toast.LENGTH_SHORT).show();
    }
    public void deleteFun(View view){
        DBHelper dbHelper=new DBHelper(this,2);
        SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();
        int deleteId= sqLiteDatabase.delete("person","_id=5",null);
        sqLiteDatabase.close();
        Toast.makeText(MainActivity.this,"deleteId:"+deleteId,Toast.LENGTH_SHORT).show();
    }
    public void selectFun(View view){
        DBHelper dbHelper=new DBHelper(this,2);
        SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();
   // select * from person
        //query(String table, String[] columns, String selection,
       // String[] selectionArgs, String groupBy, String having,
         //       String orderBy)
        Cursor cursor =  sqLiteDatabase.query("person",null,"_id=?",new String[]{"3"},null,null,null);
        int count =cursor.getCount();  // 得到上面匹配的总数
        while(cursor.moveToNext()){
            int id= cursor.getInt(0);
            String name =cursor.getString(1);
            int age= cursor.getInt(cursor.getColumnIndex("age")); //如果记得名字了可以这样
            Log.e("denganzhi","count:"+count + " id:"+id +" name:"+ name + " age:"+ age);
        }
        cursor.close();
        sqLiteDatabase.close();
    }

  6.2.4. 数据库事务操作



    public void operatorTransiction(View view){
        DBHelper dbHelper=new DBHelper(this,2);
        SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();
        // 1.开启事务, 不会自动保存提交了
        sqLiteDatabase.beginTransaction();
        ContentValues contentValues1=new ContentValues();
        contentValues1.put("age","300000");
        int updateCount1=sqLiteDatabase.update("person",contentValues1,"_id=?",new String[]{"1"});
        int j=1/0;
        contentValues1=new ContentValues();
        contentValues1.put("age","200000");
        updateCount1=sqLiteDatabase.update("person",contentValues1,"_id=?",new String[]{"2"});
        //2. 设置事务在全局
        sqLiteDatabase.setTransactionSuccessful();
        // 3. 结束事务
        sqLiteDatabase.endTransaction();
        sqLiteDatabase.close();
    }

作者:小置同学


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android数据存储基础:

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android数据存储基础:

1.基础: 1.1.Android 数据存储路径: 内部存储:/data/data/packageName/databases: 数据库/data/data/packageName/file:   内部存储/data/data/packag
2022-06-06

Android基础教程数据存储之文件存储

Android基础教程数据存储之文件存储将数据存储到文件中并读取数据1、新建FilePersistenceTest项目,并修改activity_main.xml中的代码,如下:(只加入了EditText,用于输入文本内容,不管输入什么按下b
2023-05-30

Android 基础笔记 04 篇:数据存储篇

存储模式 Android 提供了四种存储模式: 专属空间存储:以该模式存储的数据只允许特定的应用程序访问。共享空间存储:以该模式存储的数据,所有应用都可以访问。首选项存储:常用于保存键值对数据。本地数据库存储:常用于保存结构体数据。 专属空
2022-06-06

大数据存储技术基础

一、绪论1.存储的本质信息跨越空间的传递——通讯 信息跨越时间的传递——存储通讯:利用具有跨越空间特性的物理现象 ---声音、光、电存储:利用具有时间稳态的物理现象 ---物理稳态、磁稳态、半导体稳态什么是存储?存储:·它是数据临时或长期驻留的物理媒介;·它是
大数据存储技术基础
2018-01-24

【Android】数据存储

Content1. 保存数据到文件1.1. 内部、外部存储区1.2. 在内部存储区 (internal) 存放文件1.3. 在外部存储区 (external) 存放文件2. 使用共享首选项(Shared Preferences)3. 序列化
2022-06-06

ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库

1、MySQL存储过程      1.1、什么是存储过程      带有逻辑的sql语句;带有流程控制语句(if  while)等等 的sql语句  1.2、存储过程的特点      1)执行效率非常快,存储过程是数据库的服务器端执行的。      2)移植性
ava基础MySQL存储过程  Java基础 JDBC连接MySQL数据库
2019-07-25

Android数据的存储

目录小朋友,你是不是有很多问号???关于数据的存储一、SharedPreferences的应用(重要)1、获取sp的实例2、获取编辑器3、存数据4、提交数据5、回显数据二、生成xml的第一种方式(不是authority用法)1、创建sb对象
2022-06-06

MySQL基础-存储过程

存储过程定义:将一批为了完成特定功能的SQL语句集,根据传入的参数(也可没有),调用,完成单个sql语句更复杂的功能存储过程思想很简单,就是SQL语句层面上的代码封装和重用优点:1) 可封装,并隐藏复杂的业务逻辑;2) 可回传值,且可接受参数缺点:因支持的编程
2020-01-23

【Android-数据存储】外部存储(存储在SD卡上)

android的数据存储主要分为三类: 内部存储:link. 外部存储 sharedpreferences:link. 本文主要介绍外部存储的相关知识。 存储路径:/storage/emulated/0 ——————————————————
2022-06-06

【Android】数据存储_问答

Content保存数据到文件使用共享首选项 (Shared Preferences)序列化SQLite数据库 保存数据到文件在android设备中什么是internal和external存储区? internal,内部存储区,不易失,保存的
2022-06-06

Android SQLite数据库存储

前言:Android为了让我们更加方便的管理数据库,专门提供了SQLiteOpenHelper帮助类,借助这个类可以简单的对数据库进行创建和升级。 下面介绍一下SQLiteOpenHelper:(扩展知识) SQLiteOpenHelper
2022-06-06

android数据存储之文件存储方法

文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中的。概述 文件存取的核心就是输入流和输出流。 Android文件的操作模式 文件的相关操作方法文件读写的实现
2022-06-06

Android中的数据储存之文件存储

当我们在使用各种程序时,其实际上是在和各种数据打交道,当我们聊QQ,刷微博,看新闻,其实都是在和里面的数据交互例如在聊天时发出的消息,以及在登录时输入的账号密码,其实都是瞬时数据,那什么是瞬时数据呢?就是指储存在内存中,有可能因为程序关闭或
2023-06-04

数据库字段设计指南:为数据存储打下坚实基础

数据库字段设计指南是数据存储的关键,精心设计字段以确保数据完整性和可扩展性。字段类型、长度、约束、键等因素都至关重要。本文提供全面的指南,帮助您设计强大的数据库字段以支持您的数据存储需求。
数据库字段设计指南:为数据存储打下坚实基础
2024-02-14

android开发基础教程—文件存储功能实现

文件存储: 代码如下: public class MainActivity extends Activity { EditText mname, mage; TextView mtv; @Override protected void o
2022-06-06

Android数据存储之SQLite使用

SQLite是一款开源的、嵌入式关系型数据库,第一个版本Alpha发布于2000年。SQLite在便携性、易用性、紧凑性、高效性和可靠性方面有着突出的表现。 在Android中创建的SQLite数据库存储在:/data/data/<包名>/
2022-06-06

四种Android数据存储方式

Android提供以下四种存储方式:SharePreferenceSQLiteFileContentProvider Android系统中数据基本都是私有的,一般存放在“data/data/程序包名”目录下。如果要实现数据共享,正确的方式是
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录