[文章]木棉花:轻量级偏好数据库学习笔记--沈泳鑫

阅读量0
0
2


前言
       为了更好地熟练掌握鸿蒙手机应用开发,深圳大学木棉花今天就带来轻量级偏好数据库的学习笔记,供大家更好的学习鸿蒙手机的应用开发,我们也会将所有的笔记都整理到Awesome-HarmonyOS_木棉花中,如果想要查看更多详细的学习笔记,请关注Awesome-HarmonyOS_木棉花


正文基本概念         在学习轻量级偏好数据库之前呢,我们需要先了解一下数据库有什么作用,我们学完之后才能够学以致用。顾名思义,数据库肯定是具有存储功能的。这轻量级偏好数据库的话呢,不仅具有储存数据的功能,还具备将数据持久化的功能。应用运行时全量数据将会被加载在内存中的,使得访问速度更快,存取效率更高。如果对数据持久化,数据最终会落盘到文本文件中,建议在开发过程中减少落盘频率,即减少对持久化文件的读写次数。并且轻量级偏好数据库是将数据以键值对的形式储存到数据库中。那什么是键值对呢,值就是储存的数据内容,那键呢,就像是打开房间的钥匙,只有打开房间才能访问得到房间里的数据,而且每一个房间有且仅有一把钥匙与其配对。
创建工程
        打开DevEco Studio,点击左上角的File,点击New,再选择New Project,选择Empty Ability(java) ,点击Next。

将工程命名为DataBase,在Project Type中选择Application,选择API 5,并且在Device Type中选择Phone选项,点击Finish,工程就创建完成了。

设计UI界面
        我们需要设置出两个文本、两个文本输入框,三个按钮。

        在entry>src>main>java>resources>base>gr。aphic中增加一个文件。

         在graphic文件右击,选择New > Graphic Resource File,并给文件命名为 background_button。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:ohos="http://schemas.huawei.com/res/ohos"
  3.        ohos:shape="rectangle">
  4.     <corners
  5.         ohos:radius="100vp"/>
  6.     <solid
  7.         ohos:color="#007DFF"/>
  8. </shape>
复制代码
将其形状设置为矩形,圆角半径设置为100vp,背景颜色设置为蓝色。
同理,我们创建一个 background_text 的文件。
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <shape xmlns:ohos="http://schemas.huawei.com/res/ohos"
  3.        ohos:shape="rectangle">
  4.     <solid
  5.         ohos:color="#FFFFFF"/>
  6. </shape>
复制代码
那么前期的准备工作就做好了,我们接下来就需要写出我们刚刚提到的两个文本、两个文本输入框,三个按钮。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4.     ohos:height="match_parent"
  5.     ohos:width="match_parent"
  6.     ohos:orientation="vertical">

  7.     <Text
  8.         ohos:id="$+id:text_fruit_tag"
  9.         ohos:height="35vp"
  10.         ohos:width="match_parent"
  11.         ohos:background_element="$graphic:background_text"
  12.         ohos:layout_alignment="left"
  13.         ohos:text="Fruit"
  14.         ohos:text_size="85"
  15.         ohos:right_margin="20vp"
  16.         ohos:left_margin="20vp"
  17.         ohos:text_color="#000000"
  18.         ohos:top_margin="25vp"
  19.         />

  20.     <TextField
  21.         ohos:id="$+id:text_fruit"
  22.         ohos:height="35vp"
  23.         ohos:width="match_parent"
  24.         ohos:background_element="$graphic:background_text"
  25.         ohos:layout_alignment="left"
  26.         ohos:text="Orange"
  27.         ohos:text_size="50"
  28.         ohos:right_margin="20vp"
  29.         ohos:left_margin="20vp"
  30.         ohos:text_color="#000000"
  31.         ohos:top_margin="25vp"
  32.         ohos:basement="#000099"
  33.         />

  34.     <Text
  35.         ohos:id="$+id:text_number_tag"
  36.         ohos:height="35vp"
  37.         ohos:width="match_parent"
  38.         ohos:background_element="$graphic:background_text"
  39.         ohos:layout_alignment="left"
  40.         ohos:text="Number"
  41.         ohos:text_size="85"
  42.         ohos:right_margin="20vp"
  43.         ohos:left_margin="20vp"
  44.         ohos:text_color="#000000"
  45.         ohos:top_margin="25vp"
  46.         />

  47.     <TextField
  48.         ohos:id="$+id:text_number"
  49.         ohos:height="35vp"
  50.         ohos:width="match_parent"
  51.         ohos:background_element="$graphic:background_text"
  52.         ohos:layout_alignment="left"
  53.         ohos:text="25"
  54.         ohos:text_size="50"
  55.         ohos:right_margin="20vp"
  56.         ohos:left_margin="20vp"
  57.         ohos:text_color="#000000"
  58.         ohos:top_margin="25vp"
  59.         ohos:basement="#000099"
  60.         />

  61.     <Button
  62.         ohos:id="$+id:write_btn"
  63.         ohos:width="match_parent"
  64.         ohos:height="35vp"
  65.         ohos:text="Write DB"
  66.         ohos:background_element="$graphic:background_button"
  67.         ohos:text_size="50"
  68.         ohos:text_color="#FFFFFF"
  69.         ohos:top_margin="25vp"
  70.         ohos:right_margin="20vp"
  71.         ohos:left_margin="20vp"
  72.         />

  73.     <Button
  74.         ohos:id="$+id:read_btn"
  75.         ohos:width="match_parent"
  76.         ohos:height="35vp"
  77.         ohos:text="Read DB"
  78.         ohos:background_element="$graphic:background_button"
  79.         ohos:text_size="50"
  80.         ohos:text_color="#FFFFFF"
  81.         ohos:top_margin="25vp"
  82.         ohos:right_margin="20vp"
  83.         ohos:left_margin="20vp"
  84.         />

  85.     <Button
  86.         ohos:id="$+id:delete_btn"
  87.         ohos:width="match_parent"
  88.         ohos:height="35vp"
  89.         ohos:text="Delete DB File"
  90.         ohos:background_element="$graphic:background_button"
  91.         ohos:text_size="50"
  92.         ohos:text_color="#FFFFFF"
  93.         ohos:top_margin="25vp"
  94.         ohos:right_margin="20vp"
  95.         ohos:left_margin="20vp"
  96.         />

  97. </DirectionalLayout>
复制代码
那我们接下来就可以在java>com.example.mydatabase>slice>MainAbilitySlice中实现出数据库了。
首先需要定义数据。在MainAbilitySlice文件中,在 public class MainAbilitySlice extends AbilitySlice 的下一行定义全局变量。
  1.     private Context context; //DatabaseHelper的构造需要传入context
  2.     private Button buttonWrite; // 与之对应的按钮对应
  3.     private Button buttonRead;
  4.     private Button buttonDelete;
  5.     private TextField textFieldFruit; //与之对应的文本输入框对应
  6.     private TextField textFieldNumber;
  7.     private Preferences preferences; // 定义一个数据库
  8.     private DatabaseHelper databaseHelper; // 定义一个数据库操作的辅助类,可以辅助建立数据库
  9.     private String filename; // 数据库指定储存的文件名
  10.     private static final HiLogLabel TAG = new HiLogLabel(HiLog.LOG_APP,0x12345,"打印");// 定义输出控制台,可用于输出调试
复制代码
接下来在onStart中初始化刚刚定义的数据与创建数据库。
  1. context = getContext();
  2.         buttonWrite = (Button) findComponentById(ResourceTable.Id_write_btn); // 让定义的按钮获取在xml布局中定义的按钮的id,与xml布局中的输入按钮进行绑定
  3.         buttonRead = (Button) findComponentById(ResourceTable.Id_read_btn);// 与xml布局中的读取按钮进行绑定
  4.         buttonDelete = (Button) findComponentById(ResourceTable.Id_delete_btn);// 与xml布局中的删除按钮进行绑定
  5.         textFieldFruit = (TextField) findComponentById(ResourceTable.Id_text_fruit);
  6.         textFieldNumber = (TextField) findComponentById(ResourceTable.Id_text_number);
  7.         filename = "database"; // 将数据库的文件名初始化为database
  8.         databaseHelper = new DatabaseHelper(context); //实例化数据库辅助类
  9.         preferences = databaseHelper.getPreferences(filename);//实例化数据库
复制代码
至此数据库就已经创建完成,接下来就是往数据库写入数据、读取数据与删除数据库。
那接下来就分别用三个不同的函数还实现这三个功能
  1. private void Write() {
  2.         buttonWrite.setClickedListener(new Component.ClickedListener() { //这是“Write DB”按钮的一个点击监听器
  3.             @Override
  4.             public void onClick(Component component) {
  5.                 String fruit = textFieldFruit.getText(); //读取输入“Fruit”文本框的数据
  6.                 try {
  7.                     int number = Integer.parseInt(textFieldNumber.getText()); // 读取输入“Number”文本框的数据
  8.                     preferences.putString("fruit",fruit); //将读到的Fruit的字符串写入数据库,它对应的键是fruit
  9.                     preferences.putInt("number",number); //将读到的Number的字符串写入数据库,它对应的键是number
  10.                     preferences.flush(); //将实例持久化
  11.                     new ToastDialog(context).setText("Write to DB file success").show(); //这是一个文本提示框,输出提示写入数据成功
  12.                 } catch (NumberFormatException e) {
  13.                     new ToastDialog(context).setText("Please input number in Number row").show();//输出提示在文本输入框内没有输入数据
  14.                 }
  15.             }
  16.         });
  17.     }

  18.     private void Read() {
  19.         buttonRead.setClickedListener(new Component.ClickedListener() {//这是“Read DB”按钮的一个点击监听器
  20.             @Override
  21.             public void onClick(Component component) {
  22.                 String fruit = preferences.getString("fruit",""); // 在读取数据库中“fruit”对应的值,如果数据库中没有fruit这个键,那就返回空字符 可以避免程序出现异常
  23.                 int number = preferences.getInt("number",0);  //同理这在读取数据库中number对应的数值,找不到则返回0这个默认值
  24.                 String str = String.format(Locale.ENGLISH,"fruit: %s,number: %d",fruit,number);
  25.                 new ToastDialog(context).setText(str).show(); //这是在提示框中输出通过fruit和number作为键寻找到的对应的值
  26.             }
  27.         });
  28.     }

  29.     private void Delete () {
  30.         buttonDelete.setClickedListener(new Component.ClickedListener() {
  31.             @Override
  32.             public void onClick(Component component) {
  33.                 if (databaseHelper.deletePreferences(filename)) { //删除文件和文件对应的Preferences单实例 删除成功返回真,失败返回假
  34.                     preferences.clear(); // 清空数据库
  35.                     new ToastDialog(context).setText("Delete DB file success").show(); //用ToastDialog提示删除成功
  36.                 } else
  37.                     new ToastDialog(context).setText("Delete DB file failed").show(); //用ToastDialog提示删除失败
  38.             }
  39.         });
  40.     }
复制代码
最后记得在onStart中调用这三个函数
  1.         Write();
  2.         Read();
  3.         Delete();
复制代码
这是点击三个按钮之后的提示框输出的内容



至此一个完整的轻量级偏好数据库就全部完成了。
结语
       感兴趣的可以一步接一步跟着编写。更多学习资料学习笔记,请关注Awesome-HarmonyOS_木棉花,这份学习笔记也会写入其中。如果有遇到什么问题,或者查找出其中的错误之处,或者能够优化代码和界面,也欢迎各位在评论区留言讨论,让我们一起学习进步!

MyDataBase.rar
(1.07 MB, 下载次数: 0)

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友