android数据的储存、文件的储存、SharedPreferences储存、SQLite的基本用法

这篇具有很好参考价值的文章主要介绍了android数据的储存、文件的储存、SharedPreferences储存、SQLite的基本用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、文件的储存

1、将数据储存到文件中

Context类中提供了openfileOutput()方法,用来获取一个文件流,这个方法接收两个参数,第一个参数是文件名,在文件创建的时候使用的就是这个名称,注意这里指定的文件名不可以包含路径,因为所有的文件都是默认存储到/data/data/iles/目录下的。第二个参数是文件的操作模式,主要有两种模式可选,MODE_PRIVATE和MODE_APPEND。

MODE_PRIVATE:会覆盖源文件数据

MODE_APPEND:在源文件后追加数据

将文本内容保存到文件的代码展示:

public void save(){
    String Data = "Data on save";
    //创建一个文件流
    FileOutputStream out = null;//创建一个缓存流
        BufferedWriter writer  = null;

    try {
        //打开这个文件流
        out = openFileOutput("data",MODE_PRIVATE);
        //将文件流转化转换流,在通过转换流得到缓存流
        writer = new BufferedWriter(new OutputStreamWriter(out));

        //通过缓存流写入数据
        writer.write(Data);
    }catch (IOException e){
        e.printStackTrace();
    }finally {
        if(writer != null){
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

android数据的储存、文件的储存、SharedPreferences储存、SQLite的基本用法,android,sqlite,开发语言,java

2、从文件中读取数据

Context类中还提供了一个openFileInput()方法,用于读取文件。只接收一个参数及要读取的文件名。

读取数据代码如下:

    private String load() {
        FileInputStream fileInputStream = null;
        BufferedReader bufferedReader = null;
        StringBuilder builder = new StringBuilder();

        try {
            fileInputStream = openFileInput("data");
            bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
            String leng = "";
            while ((leng = bufferedReader.readLine()) != null){
                builder.append(leng);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(bufferedReader != null){
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        return builder.toString();
    }
  • bufferedReader.lines()用于处理大型文件,通过返回一个字符串流(Stream<String>)来处理每一行数据。直接返回所有内容,不需要判读是否读取结束。

  • bufferedReader.readLine()用于读取文件的一行文本数据,并返回一个字符串。读取结束时返回null

  • bufferedReader.read()用于逐个读取字符的整数值,并需要自己处理字符的连接以获取完整的文本数据。这种方法更适合处理二进制数据或特殊的文本处理场景。

  • int len = 0; //文件读取长度
    byte[] careBuffer = new byte[1024]; //1kb
    while ((len = buff.read(careBuffer)) != EOF) {
        buff1.write(careBuffer, 0, len);
    }
    

二、SharedPreferences

1、获取SharedPreferences对象的两种方式

1.1 Context类中的getSharedPreferences()

该方法接受两个参数,第一个参数是文件名,第二个参数是MODE_PRIVATE和直接传入0的效果一样,表示只有当前程序才可以对Sharedpreferences进行读写操作。

1.2 Activity类中的getPreferences()方法

这个方法和Context中的getSharedPreferences()方法很相似,不过它只接收一个操作模式参数(MODE_PRIVATE),因为使用这个方法时会自动将当前活动的类名作为SharedPreferences的文件名。

2、将数据储存到SharedPreferences

1.1实现步骤

a、得到SharedPreferences对象以后调用edit()方法获取一个内部类的SharedPreferences.Editor.

b、向Editor对象中添加数据,例如添加字符串就使用putString(),添加int类型数据就使用putInt()

c、使用apply()方法提交数据完成储存

2.2 实现代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText = findViewById(R.id.edit);

    SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();

    editor.putString("username", "lukecc0");
    editor.putString("age", "1");
    editor.putBoolean("married", false);

    editor.apply();

}

android数据的储存、文件的储存、SharedPreferences储存、SQLite的基本用法,android,sqlite,开发语言,java

username就相当于key,在SharedPreferences中,每个数据都有一个关联的键(key),通过这个键可以访问相应的值(value)。通过SharedPreferences.Editor对象,你可以添加、编辑或删除这些键值对。

3、从SharedPrefrences中读取数据

SharedPreferences对象中提供了一系列的get方法,用于对存储的数据进行读取,每种get方法都对应SharedPreferences.Editor中的一种put方法

比如读取一个布尔型数据就使用getBoolean()方法,读取一个字符中就使用getString()方法。

这些get方法都接收两个参数,第一个参数是键,传入存储数据时使用的键就可以得到相应的值了,第二个参数是默认值,即表示当传入的键找不到对应的值时会以什么样的默认值进行返回。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText = findViewById(R.id.edit);
    Button button = findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //读取数据
            SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
            editText.setText(pref.getString("username","admin")+"\n"
                             +pref.getString("age","0")+"\n"+pref.getBoolean("marride",false));
        }
    });

}

当点击按钮后就会出现数据,如下图:

android数据的储存、文件的储存、SharedPreferences储存、SQLite的基本用法,android,sqlite,开发语言,java

android数据的储存、文件的储存、SharedPreferences储存、SQLite的基本用法,android,sqlite,开发语言,java

三、SQLite

1、创建数据库

建立一个MyDatabase类继承SQLite

重写onCreate、onUPgrade方法

获得MyDatabase的实例

选择打开方式打开

SQLiteOpenHelper是一个抽象类,这意味着如果我们想要使用它的话,就需要创建一个自己的帮助类去继承它。SQLiteOpenHelper中有两个抽象方法,分别是onCreate()onUpgrade()我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。

SQLiteOpenHelper中还有两个重要的实例方法,getReadableDatabasegetwirtableDatabase,这两个方法的可以创建或打开一个数据库,不同的是如果磁盘满了的情况下:

  • getReadableDAtabase方法返回的对象将以只读的方式打开数据库

  • getWritableDatabase方法将会出现异常

SQL建立表语句:

create table Book(
    id integer primary key autoincrement,
    author text,
    price real,
    pages integer,
    name text)

integer表示整型,real表示浮点型,txt表示文本类型,blob表示二进制类型,primary key设置主键,autoincrement显示id是自动增长的。

public class MyDatabaseHelper extends SQLiteOpenHelper {

    public static final String CREATE_BOOK = "create table Book("
            + "id integer primary key autoincrement,"
            + "author text,"
            + "price real,"
            + "pages integer,"
            + "name text)";

    public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        //创建数据库,参数为建库语句
        sqLiteDatabase.execSQL(CREATE_BOOK);
        Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    }
}

**public SQLiteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version)**构造方法的含义:

  • context:Android 应用程序的上下文
  • name: 这是要创建或打开的数据库的名称。如果数据库不存在SQLiteOpenHelper 会创建一个新的数据库文件,如果数据库已经存在,它将尝试打开该数据库。这里传入的数据库名称可以是一个字符串,表示数据库的名称。
  • factory:这是一个用于创建游标对象的工厂。游标是用于查询数据库并遍历结果集的对象。通常情况下,你可以传入 null
  • version:这是数据库的版本号。当应用程序需要进行数据库结构的更改时,你需要增加数据库版本号。

在MainActivity中使用数据库

public class MainActivity extends AppCompatActivity {

    private MyDatabaseHelper dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建一个数据库的帮助类
        dbHelper = new MyDatabaseHelper(this,"BookStore.dp",null,2);

        Button button =findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                创建数据库
                dbHelper.getWritableDatabase();
            }
        });
    }
}

那么如何看到这个数据库呢?请参考android官方开发文档

查询数据库

2、更新数据库

使用onUpgrade更新数据库。

例如现在需要再建立一个表,如果已经建好表的情况下,onCreate是不会再继续执行的。因此这样的在onCreate中直接加入建表语句是不行的。

private static final String Category = "create table Category("
    + "id integer primary key autoincrement,"
    + "Category_name text,"
    + "Category_code integer)";

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    //创建数据库,参数为建库语句
    sqLiteDatabase.execSQL(CREATE_BOOK);
    sqLiteDatabase.execSQL(Category);
    Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();
}

因此我们需要在onUpgrade中编写代码逻辑。

drop table if exists:是一个 SQL 语句,用于删除表,使用这个语句时要小心,因为一旦执行,表中的所有数据将被永久删除,并且无法恢复。这通常用于在数据库中不再需要某个表时进行清理。

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    sqLiteDatabase.execSQL("drop table if exists Book");
    sqLiteDatabase.execSQL("drop table if exists Gategory");

    onCreate(sqLiteDatabase);
}

在上述这段代码中,会先删除两个表,然后重新创建两个表。主要原表的数据将会被清空。如何实现不清空原表数据?如果有SQL基础请看下面这段代码,没有请自行忽略这个问题。

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        // 备份旧表数据
        sqLiteDatabase.execSQL("CREATE TABLE Book_backup AS SELECT * FROM Book");

        // 删除旧的 Book 表
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS Book");

        // 创建新的 Book 表
        sqLiteDatabase.execSQL(CREATE_BOOK);

        // 将备份表数据复制到新表中
        sqLiteDatabase.execSQL("INSERT INTO Book (id, author, price, pages, name) SELECT id, author, price, pages, name FROM Book_backup");

        // 删除备份表
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS Book_backup");
        

        Toast.makeText(mContext, "Database upgraded successfully", Toast.LENGTH_SHORT).show();
    }

接下来我们需要让onUpgrade 可以执行,在使用MyDatabase的构造方法时,修改最后一个传递参数version,他显示的数据库版本,我们之前使用的是1,现在传递一个比1大的数即可。

3、添加数据——insert

前面我们已经知道,调用SQLiteOpenHelpergetReadableDatabase()getwritable-Datābase()方法是可以用于创建和升级数据库的。

不仅如此,这两个方法还都会返回一个SQLiteDatabase对象,借助这个对象就可以对数据进行CRUD操作了。

**SQLiteDatabase提供了一个insert方法,用于添加数据。**它需要三个参数。

第一个参数是表名,我们需要往哪个表加入数据就写哪个表名。

第二个参数用于在未指定添加数据的情况下给某些可为空的列自动赋值NULL,一般我们用不到这个功能,直接传入null即可。

第三个参数是一个ContentValues对象,它提供了一系列的put()方法重载,用于向ContentValues中添加数据,只需要将表中的每个列名以及相应的待添加数据传入即可。

binding.button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();

        //将数据保存起来,第一条数据
        values.put("name","This is one");
        values.put("author","dow");
        values.put("pages",23);
        values.put("price",12);

        //添加数据
        db.insert("Book",null,values);

        //将数据保存起来,第二条数据
        values.put("name","This is two");
        values.put("author","dow1");
        values.put("pages",231);
        values.put("price",112);

        db.insert("Book",null,values);
    }
});

点击这个按钮,我们每次向数据库中保存两条数据。

android数据的储存、文件的储存、SharedPreferences储存、SQLite的基本用法,android,sqlite,开发语言,java

为什么没有给id赋值?因为我们在建表时已经设置为了自动增长

id integer primary key autoincrement

4、更新数据——updata

binding.button2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put("price",110);
        //更新所有名为This is one的书
        db.update("Book",values,"name = ?",new String[]{"This is one"});
    }
});

5、删除数据——delete

//删
binding.button3.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        db.delete("Book","pages > ?",new String[]{"200"});
    }
});

指定删除pages大于200的书。

6、查询数据——query

query具有7个参数

android数据的储存、文件的储存、SharedPreferences储存、SQLite的基本用法,android,sqlite,开发语言,java

它会返回一个Cursor对象,这个对象中保存了数据库的信息,查询的所有数据都从这个对象中取出。

//查
binding.button4.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        Cursor cursor = db.query("Book",null,null,null,null,null,null);

        if(cursor.moveToFirst()){
            do {
                String name = cursor.getString(cursor.getColumnIndex("name"));
                int price = cursor.getInt(cursor.getColumnIndex("price"));

                Log.d("TAG1",name);
                Log.d("TAG1",price+"");

            }while (cursor.moveToNext());
        }
    }
});

android数据的储存、文件的储存、SharedPreferences储存、SQLite的基本用法,android,sqlite,开发语言,java

moveToFirst方法,将数据的指针移到开头第一行的位置。然后进入一个循环读取数据,在while中使用moveToNext方法每次将数据指针向下移动一位。getColumnIndex方法用于获取指定某一列在表中的位置。

如下表,先获取了name、price的位置,然后通过这个位置取得了该位置上的数据。

android数据的储存、文件的储存、SharedPreferences储存、SQLite的基本用法,android,sqlite,开发语言,java文章来源地址https://www.toymoban.com/news/detail-608457.html

到了这里,关于android数据的储存、文件的储存、SharedPreferences储存、SQLite的基本用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android : Room 数据库的基本用法 —简单应用_一_入门

    Android Room 是 Android 官方提供的一个持久性库,用于在 Android 应用程序中管理数据库。它提供了一个简单的 API 层,使得使用 SQLite 数据库变得更加容易和方便。 以下是 Android Room 的主要特点: 对象关系映射 (ORM):Room 允许您将 Java 或 Kotlin 对象映射到数据库表中。您可以定义数

    2024年04月09日
    浏览(87)
  • Android SharedPreferences源码分析

    SharedPreferences 是 Android 平台上轻量级的 K-V 存储框架。 SharedPreferences 采用 XML 文件格式持久化键值对数据,文件的存储位置位于应用沙盒的内部存储 /data/data/包名/shared_prefs/ 位置,每个 XML 文件对应于一个 SharedPreferences 对象。 一个sp文件(XML文件) 对应一个 SharedPreferences 对象

    2024年02月19日
    浏览(45)
  • Android(Kotlin) 委托(by) 封装 SharedPreferences

    在 Kotlin 中,委托是一种通过将自身的某个功能交给另一个对象来实现代码重用的技术。通过委托,我们可以将某个属性或方法的实现委托给另一个对象,从而减少重复代码的编写。委托可以用于实现多重继承、代码复用和扩展现有类的功能。 Kotlin 中的委托通过 “b

    2024年04月09日
    浏览(35)
  • PostgreSQL 配置文件、数据储存目录

    在PostgreSQL的数据

    2024年02月02日
    浏览(41)
  • sqlite数据库基本使用

    sqlite数据库是sql数据库引擎的一种,它不需要任何配置,不需要服务器,是一个轻量级的嵌入式数据库。安装sqlite见文档:SQLite3的安装与使用_sqlite3安装_冒险的梦想家的博客-CSDN博客 下面直接对sqlite3数据库基本命令进行说明: 1.获取sqlite版本的命令 sqlite3 --version 2.数据库创

    2024年02月10日
    浏览(47)
  • Android 之 WebView (网页视图)基本用法

    本节给大家带来的是Android中的一个用于显示网页的控件: WebView (网页视图)。 现在Android应用 层开发的方向有两种:客户端开发和HTML5移动端开发! 所谓的HTML5端就是:HTML5 + CSS + JS来构建 一个网页版的应用,而这中间的媒介就是这个WebView,而Web和网页端可以通过JS来进行交互

    2024年02月12日
    浏览(42)
  • [Android Studio]Android 数据存储--SQLite数据库存储

     🟧🟨🟩🟦🟪 Android Debug 🟧🟨🟩🟦🟪 Topic   发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 💯实战演练--基于SQLite数据库的通讯录实现数据的增删改查 1,创建程序 2,放置界面控件 3,编写界面交互代码 4, 核心方法讲解 5,数据库

    2024年02月08日
    浏览(52)
  • 02.sqlite3学习——嵌入式数据库的基本要求和SQLite3的安装

    目录 嵌入式数据库的基本要求和SQLite3的安装 嵌入式数据库的基本要求 常见嵌入式数据库 sqlite3简介 SQLite3编程接口模型 ubuntu 22.04下的SQLite安装 (1)安装SQLite3软件 sudo apt-get install sqlite3 (2)安装库文件 sudo apt-get install libsqlite3-dev 安装成功后输入sqlite3查看 (3)安装sqlite3可

    2024年02月11日
    浏览(73)
  • Android 进阶 1、sqlite数据库

    在我们学会了Android的基本使用之后就需要往高处发展了,毕竟水往高处流,很多时候我们学习一门技术感觉没有收获都是因为还没到那个层次,当你一步步往上走的时候就会渐渐发现自己收获的越来越多,进步也就会越来越快了,废话不多说,回到正题; 1、认识数据库 安卓

    2024年02月10日
    浏览(48)
  • Android之SQLite数据库使用

    SQLite是Android系统集成的一个轻量级的数据库。 Android提供了 SQLiteDatabase代表一个数据库 (底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,接下来可通过SQLiteDatabase对象来管理、操作数据库了。 Android为了让我们能够更加方便地管理数据库,

    2024年02月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包