鸿蒙轻量级数据库DatabaseHelper基本用法和技巧

数据库 其他数据库
今天要讲的是鸿蒙里面轻量级数据DatabaseHelper基本用法一些技巧,那么废话不多说我们正式开始。

[[438853]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

前言:

今天要讲的是鸿蒙里面轻量级数据 DatabaseHelper基本用法一些技巧,那么废话不多说我们正式开始。

效果图

#星光计划2.0# 鸿蒙  轻量级数据库 DatabaseHelper基本用法和技-鸿蒙HarmonyOS技术社区
#星光计划2.0# 鸿蒙  轻量级数据库 DatabaseHelper基本用法和技-鸿蒙HarmonyOS技术社区
#星光计划2.0# 鸿蒙  轻量级数据库 DatabaseHelper基本用法和技-鸿蒙HarmonyOS技术社区
#星光计划2.0# 鸿蒙  轻量级数据库 DatabaseHelper基本用法和技-鸿蒙HarmonyOS技术社区
#星光计划2.0# 鸿蒙  轻量级数据库 DatabaseHelper基本用法和技-鸿蒙HarmonyOS技术社区

1.介绍

轻量级偏好数据库是轻量级存储,主要用于保存应用的一些常用配置。它是使用键值对的形式来存储数据的,保存数据时,需要给这条数据提供一个键,读取数据时再通过这个键把对应的值取出来。

说明

#星光计划2.0# 鸿蒙  轻量级数据库 DatabaseHelper基本用法和技-鸿蒙HarmonyOS技术社区

通过观察源码 轻量级偏好数据库值的存储数据类型包括整型、长整型、浮点型、布尔型、字符串型、字符串型Set集合。数据存储在本地文件中,同时也加载在内存中,不适合需要存储大量数据和频繁改变数据的场景,建议存储的数据不超过一万条。

2.创建数据库

创建数据库使用数据库操作的辅助类DatabaseHelper,通过DatabaseHelper的getPreferences(String name)方法可以获取到对应文件名的Preferences实例,再通过Preferences提供的方法进行数据库的相关操作。

DatabaseHelper的构造需要传入context,Ability和AbilitySlice都实现了ohos.app.Context接口。因此可以从应用中的Ability或AbilitySlice调用getContext()方法来获得context。

Preferences的数据存储在文件中,因此需要指定存储的文件名,其取值不能为空,也不能包含路径,默认存储目录可以通过Context.getPreferencesDir()获取。

  1. DatabaseHelper databaseHelper = new DatabaseHelper(context);   
  2. String filename = "pdb";   
  3. Preferences preferences = databaseHelper.getPreferences(filename); 

3.写入数据

我们这边在拿到输入框输入的数字和文字 然后在按钮点击的是调用preferences 里面put 方法将数据存储起来

通过Preferences的putString(String var1, String var2)和putInt(String var1, int var2)方法可以将数据写入Preferences实例,通过flush()或者flushSync()将Preferences实例持久化。

flush()会立即更改内存中的Preferences对象,但会将更新异步写入磁盘。flushSync()更改内存中的数据的同时会将数据同步写入磁盘。由于flushSync()是同步的,建议不要从主线程调用它,以避免界面卡顿。

  1. /*** 
  2.     *  写入数据 
  3.     * 
  4.     * 
  5.     */ 
  6.    private void btnWrite() { 
  7.        btnWrite.setClickedListener(new Component.ClickedListener() { 
  8.            @Override 
  9.            public void onClick(Component component) { 
  10.                String fruit = textFiledFruit.getText(); 
  11.                try { 
  12.                    int number = Integer.parseInt(textFiledNumber.getText()); 
  13.                    preferences.putInt("number",number); 
  14.                    preferences.putString("fruit",fruit); 
  15.                    preferences.flush(); 
  16.                    new ToastDialog(context).setText("Write to DB file success").show(); 
  17.                } catch (NumberFormatException e) { 
  18.                    new ToastDialog(context).setText("Please input number in Number row").show(); 
  19.                } 
  20.            } 
  21.        }); 
  22.    } 

4.读取数据

我们通过调用 preferences 中的get方法来获取存储在DataBase库中的数据

通过Preferences的getString(String var1, String var2)和getInt(String var1, int var2)方法传入键来获取对应的值;如果键不存在,则返回默认值。

例如获取上述fruit和number键的值,如果fruit和number键不存在,则会分别返回""和0值。通过默认值的设置,来避免程序出现异常。

  1. /*** 
  2.   * 
  3.   * 读取数据 
  4.   * 
  5.   */ 
  6.  private void btnRead() { 
  7.      btnRead.setClickedListener(new Component.ClickedListener() { 
  8.          @Override 
  9.          public void onClick(Component component) { 
  10.              String string = String.format(Locale.ENGLISH,"Fruit: %s,Number: %d"
  11.                      preferences.getString("fruit"""),preferences.getInt("number", 0)); 
  12.              new ToastDialog(context).setText(string).show(); 
  13.          } 
  14.      }); 
  15.  } 

5.删除数据库

通过DatabaseHelper的deletePreferences(String name)方法删除指定文件。

删除指定文件时,应用不允许再使用该实例进行数据操作,否则会出现数据一致性问题。以删除上述名称为"pdb"的文件为例。

  1. /** 
  2.    * 删除数据 
  3.    * 
  4.    */ 
  5.   private void btnDelete() { 
  6.       btnDelete.setClickedListener(new Component.ClickedListener() { 
  7.           @Override 
  8.           public void onClick(Component component) { 
  9.               if (databaseHelper.deletePreferences(filename)) { 
  10.                   preferences.clear(); 
  11.                   new ToastDialog(context).setText("Delete DB file success").show(); 
  12.               } else { 
  13.                   new ToastDialog(context).setText("Delete DB file failed").show(); 
  14.               } 
  15.           } 
  16.       }); 
  17.   } 

说明

轻量级偏好数据库支持数据库文件的创建、移动,数据的查询、插入、删除,以及支持注册观察者来观察数据是否发生变化。详细信息可参考轻量级偏好数据库。

6.缓存list 数据

通过观察源码我们发现 DatabaseHelper轻量级数据库是没有办法直接存储我们的list集合 这个是我们该怎么办 我们通过将List转成json字符串 然后将json存起来 我们在取值的拿到json字符串在还原成list就可以实现了 为了方便演示我们这边写了一个工具类

存储list的方法

  1. /** 
  2.   * 4.存储list 
  3.   */ 
  4.  public static void putSelectBean(Context context, List<UserBean> phoneList, String key) { 
  5.      databaseHelper = new DatabaseHelper(context); 
  6.      preferences = databaseHelper.getPreferences(filename); 
  7.      Gson gson = new Gson(); 
  8.      String json = gson.toJson(phoneList); 
  9.      preferences.putString(key, json); 
  10.      preferences.flush(); 
  11.  } 

我们写了一个 putSelectBean 来存储我们的list

读取 list的方法

  1. /** 
  2.      * 读取list 
  3.      */ 
  4.     public static List<UserBean> getSelectBean(Context context, String key) { 
  5.         databaseHelper = new DatabaseHelper(context); 
  6.         preferences = databaseHelper.getPreferences(filename); 
  7.         Gson gson = new Gson(); 
  8.         String json = preferences.getString(keynull); 
  9.         Type type = new TypeToken<List<UserBean>>() { 
  10.         }.getType(); 
  11.         List<UserBean> arrayList = gson.fromJson(json, type); 
  12.         return arrayList; 
  13.     } 

 具体存储list调用

  1. /*** 
  2.     * 
  3.     * 缓存list 集合类型数据 
  4.     * 
  5.     */ 
  6.    private void btnSavelist() { 
  7.  
  8.      btnsavelist.setClickedListener(new Component.ClickedListener() { 
  9.          @Override 
  10.          public void onClick(Component component) { 
  11.              UserBean userBean=new UserBean(); 
  12.              userBean.setUsername("test"); 
  13.              userBean.setPassword("123456"); 
  14.              List<UserBean> datalist=new ArrayList<>(); 
  15.              datalist.add(userBean); 
  16.              DataBaseUtil.putSelectBean(context,datalist,"datalist"); 
  17.              new ToastDialog(context).setText("写入成功").show(); 
  18.  
  19.          } 
  20.      }); 
  21.    } 

 读取list类型数据调用

  1. /*** 
  2.    * 
  3.    * 读取list 集合类型数据 
  4.    * 
  5.    */ 
  6.  
  7.   private  void  btnReadList(){ 
  8.       btn_read_list.setClickedListener(new Component.ClickedListener() { 
  9.           @Override 
  10.           public void onClick(Component component) { 
  11.  
  12.               List<UserBean>getData= (List<UserBean>) DataBaseUtil.getSelectBean(context,"datalist"); 
  13.               UserBean userBean= getData.get(0); 
  14.               new ToastDialog(context).setText(userBean.getUsername()+userBean.getPassword()).show(); 
  15.           } 
  16.       }); 
  17.   } 

7.DatabaseHelper存储的简单封装

我们在使用 DatabaseHelper的时候每次都要

  1. DatabaseHelper databaseHelper = new DatabaseHelper(context);   
  2. String filename = "pdb";   
  3. Preferences preferences = databaseHelper.getPreferences(filename); 

然后调用 preferences 的put方法存储 和get方法读取 代码显得不是很简洁 我们做一个简单的工具类封装即可

存储方法的封装

  1. private static  String filename = "pdb"
  2.    private static  Preferences preferences; 
  3.    private static  DatabaseHelper databaseHelper; 
  4.  
  5.    /** 
  6.     * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 
  7.  
  8.  
  9.     * 
  10.     * @param context 
  11.     * @param key 
  12.     * @param object 
  13.     * @param :DataBaseUtil.setParam(this, "key""value"); 
  14.     *                                               key -- userid / accountId obj== 
  15.     */ 
  16.    public static void setParam(Context context, String key, Object object) { 
  17.        String type = "String"
  18.        if (object != null) { 
  19.            type = object.getClass().getSimpleName(); 
  20.        } 
  21.        databaseHelper = new DatabaseHelper(context); 
  22.        preferences = databaseHelper.getPreferences(filename); 
  23.  
  24.        if ("String".equals(type)) { 
  25.            preferences.putString(key, (String) object); 
  26.        } else if ("Integer".equals(type) || "int".equals(type)) { 
  27.            preferences.putInt(key, (Integer) object); 
  28.        } else if ("Boolean".equals(type) || "boolean".equals(type)) { 
  29.            preferences.putBoolean(key, (Boolean) object); 
  30.        } else if ("Float".equals(type) || "float".equals(type)) { 
  31.            preferences.putFloat(key, (Float) object); 
  32.        } else if ("Long".equals(type) || "long".equals(type)) { 
  33.            preferences.putLong(key, (Long) object); 
  34.        } 
  35.        preferences.flush(); 
  36.    } 

读取方法的简单封装

  1. /** 
  2.    * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 
  3.    * 
  4.    * @param context 
  5.    * @param key                                             关键字 
  6.    * @param defaultObject                                   若取回空值则返回此默认值 
  7.    * @param :DataBaseUtil.getParam(Activity.this, "key""defaultValue"); 
  8.    * @return 
  9.    */ 
  10.   public static Object getParam(Context context, String key, Object defaultObject) { 
  11.       String type = "String"
  12.       if (defaultObject != null) { 
  13.           type = defaultObject.getClass().getSimpleName(); 
  14.       } 
  15.       databaseHelper = new DatabaseHelper(context); 
  16.       preferences = databaseHelper.getPreferences(filename); 
  17.       if ("String".equals(type)) { 
  18.           return preferences.getString(key, (String) defaultObject); 
  19.       } else if ("Integer".equals(type) || "int".equals(type)) { 
  20.           return preferences.getInt(key, (Integer) defaultObject); 
  21.       } else if ("Boolean".equals(type) || "boolean".equals(type)) { 
  22.           return preferences.getBoolean(key, (Boolean) defaultObject); 
  23.       } else if ("Float".equals(type) || "float".equals(type)) { 
  24.           return preferences.getFloat(key, (Float) defaultObject); 
  25.       } else if ("Long".equals(type) || "long".equals(type)) { 
  26.           return preferences.getLong(key, (Long) defaultObject); 
  27.       } 
  28.       return null
  29.   } 

具体调用

  1. /*** 
  2.     *  
  3.     * 调用工具类方法存储   
  4.     */ 
  5.    private void btnSavetoutils() { 
  6.     btnsave_toutils.setClickedListener(new Component.ClickedListener() { 
  7.         @Override 
  8.         public void onClick(Component component) { 
  9.  
  10.             String fruit = textFiledFruit.getText(); 
  11.             try { 
  12.                 int number = Integer.parseInt(textFiledNumber.getText()); 
  13.                 DataBaseUtil.setParam(context,"number",number); 
  14.                 DataBaseUtil.setParam(context,"fruit",fruit); 
  15.                 new ToastDialog(context).setText("写入成功").show(); 
  16.             } catch (NumberFormatException e) { 
  17.                 new ToastDialog(context).setText("Please input number in Number row").show(); 
  18.             } 
  19.  
  20.         } 
  21.     }); 
  22.    } 

完整示例

xml布局代码

  1.     
  2. <?xml version="1.0" encoding="utf-8"?> 
  3. <DirectionalLayout 
  4.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  5.     ohos:height="match_parent" 
  6.     ohos:width="match_parent" 
  7.     ohos:orientation="vertical"
  8.  
  9.     <Text 
  10.         ohos:id="$+id:text_fruit_tag" 
  11.         ohos:height="35vp" 
  12.         ohos:width="match_parent" 
  13.         ohos:background_element="$graphic:text_element" 
  14.         ohos:layout_alignment="left" 
  15.         ohos:text="Fruit" 
  16.         ohos:text_size="85" 
  17.         ohos:right_margin="20vp" 
  18.         ohos:left_margin="20vp" 
  19.         ohos:top_margin="25vp" 
  20.         ohos:text_color="#000000" 
  21.         /> 
  22.  
  23.     <TextField 
  24.         ohos:id="$+id:text_fruit" 
  25.         ohos:height="35vp" 
  26.         ohos:width="match_parent" 
  27.         ohos:background_element="$graphic:text_element" 
  28.         ohos:layout_alignment="left" 
  29.         ohos:text="Orange" 
  30.         ohos:text_size="50" 
  31.         ohos:right_margin="20vp" 
  32.         ohos:left_margin="20vp" 
  33.         ohos:text_color="#000000" 
  34.         ohos:top_margin="25vp" 
  35.         ohos:basement="#000099" 
  36.         /> 
  37.  
  38.     <Text 
  39.         ohos:id="$+id:text_number_tag" 
  40.         ohos:height="35vp" 
  41.         ohos:width="match_parent" 
  42.         ohos:background_element="$graphic:text_element" 
  43.         ohos:layout_alignment="left" 
  44.         ohos:text="Number" 
  45.         ohos:text_size="85" 
  46.         ohos:right_margin="20vp" 
  47.         ohos:left_margin="20vp" 
  48.         ohos:text_color="#000000" 
  49.         ohos:top_margin="25vp" 
  50.         /> 
  51.  
  52.     <TextField 
  53.         ohos:id="$+id:text_number" 
  54.         ohos:height="35vp" 
  55.         ohos:width="match_parent" 
  56.         ohos:background_element="$graphic:text_element" 
  57.         ohos:layout_alignment="left" 
  58.         ohos:text="25" 
  59.         ohos:text_size="50" 
  60.         ohos:right_margin="20vp" 
  61.         ohos:left_margin="20vp" 
  62.         ohos:text_color="#000000" 
  63.         ohos:top_margin="25vp" 
  64.         ohos:basement="#000099" 
  65.         /> 
  66.  
  67.     <Button 
  68.         ohos:id="$+id:write_btn" 
  69.         ohos:width="match_parent" 
  70.         ohos:height="35vp" 
  71.         ohos:text="写入缓存" 
  72.         ohos:background_element="$graphic:button_element" 
  73.         ohos:text_size="50" 
  74.         ohos:text_color="#FFFFFF" 
  75.         ohos:top_margin="25vp" 
  76.         ohos:right_margin="20vp" 
  77.         ohos:left_margin="20vp" 
  78.         /> 
  79.  
  80.     <Button 
  81.         ohos:id="$+id:read_btn" 
  82.         ohos:width="match_parent" 
  83.         ohos:height="35vp" 
  84.         ohos:text="读取缓存" 
  85.         ohos:background_element="$graphic:button_element" 
  86.         ohos:text_size="50" 
  87.         ohos:text_color="#FFFFFF" 
  88.         ohos:top_margin="25vp" 
  89.         ohos:right_margin="20vp" 
  90.         ohos:left_margin="20vp" 
  91.         /> 
  92.  
  93.     <Button 
  94.         ohos:id="$+id:delete_btn" 
  95.         ohos:width="match_parent" 
  96.         ohos:height="35vp" 
  97.         ohos:text="删除缓存" 
  98.         ohos:background_element="$graphic:button_element" 
  99.         ohos:text_size="50" 
  100.         ohos:text_color="#FFFFFF" 
  101.         ohos:top_margin="25vp" 
  102.         ohos:right_margin="20vp" 
  103.         ohos:left_margin="20vp" 
  104.         /> 
  105.  
  106.  
  107.     <Button 
  108.         ohos:id="$+id:save_list" 
  109.         ohos:width="match_parent" 
  110.         ohos:height="35vp" 
  111.         ohos:text="存储list" 
  112.         ohos:background_element="$graphic:button_element" 
  113.         ohos:text_size="50" 
  114.         ohos:text_color="#FFFFFF" 
  115.         ohos:top_margin="25vp" 
  116.         ohos:right_margin="20vp" 
  117.         ohos:left_margin="20vp" 
  118.         /> 
  119.  
  120.     <Button 
  121.         ohos:id="$+id:read_list" 
  122.         ohos:width="match_parent" 
  123.         ohos:height="35vp" 
  124.         ohos:text="读取list" 
  125.         ohos:background_element="$graphic:button_element" 
  126.         ohos:text_size="50" 
  127.         ohos:text_color="#FFFFFF" 
  128.         ohos:top_margin="25vp" 
  129.         ohos:right_margin="20vp" 
  130.         ohos:left_margin="20vp" 
  131.         /> 
  132.     <Button 
  133.         ohos:id="$+id:save_toutils" 
  134.         ohos:width="match_parent" 
  135.         ohos:height="35vp" 
  136.         ohos:text="工具类缓存调用" 
  137.         ohos:background_element="$graphic:button_element" 
  138.         ohos:text_size="50" 
  139.         ohos:text_color="#FFFFFF" 
  140.         ohos:top_margin="25vp" 
  141.         ohos:right_margin="20vp" 
  142.         ohos:left_margin="20vp" 
  143.         /> 
  144. </DirectionalLayout> 

布局效果图

#星光计划2.0# 鸿蒙  轻量级数据库 DatabaseHelper基本用法和技-鸿蒙HarmonyOS技术社区

 java逻辑代码

  1. package com.example.datademo.slice; 
  2. import com.example.datademo.ResourceTable; 
  3. import com.example.datademo.bean.UserBean; 
  4. import com.example.datademo.utils.DataBaseUtil; 
  5. import ohos.aafwk.ability.AbilitySlice; 
  6. import ohos.aafwk.content.Intent; 
  7. import ohos.agp.components.Button; 
  8. import ohos.agp.components.Component; 
  9. import ohos.agp.components.TextField; 
  10. import ohos.agp.window.dialog.ToastDialog; 
  11. import ohos.app.Context; 
  12. import ohos.data.DatabaseHelper; 
  13. import ohos.data.preferences.Preferences; 
  14. import java.util.ArrayList; 
  15. import java.util.List; 
  16. import java.util.Locale; 
  17.  
  18.  
  19. public class MainAbilitySlice extends AbilitySlice { 
  20.     private Context context; 
  21.     private Button btnWrite; 
  22.     private Button btnRead; 
  23.     private Button btnDelete; 
  24.     private TextField textFiledFruit; 
  25.     private TextField textFiledNumber; 
  26.     private String filename; 
  27.     private Preferences preferences; 
  28.     private DatabaseHelper databaseHelper; 
  29.     private Button btnsavelist; 
  30.     private Button btnsave_toutils; 
  31.     private Button btn_read_list; 
  32.  
  33.  
  34.     @Override 
  35.     public void onStart(Intent intent) { 
  36.         super.onStart(intent); 
  37.         super.setUIContent(ResourceTable.Layout_ability_main); 
  38.         context = getContext(); 
  39.         btnWrite = (Button) findComponentById(ResourceTable.Id_write_btn); 
  40.         btnRead = (Button) findComponentById(ResourceTable.Id_read_btn); 
  41.         btnDelete = (Button) findComponentById(ResourceTable.Id_delete_btn); 
  42.         textFiledFruit = (TextField) findComponentById(ResourceTable.Id_text_fruit); 
  43.         textFiledNumber = (TextField) findComponentById(ResourceTable.Id_text_number); 
  44.         btnsavelist= (Button) findComponentById(ResourceTable.Id_save_list); 
  45.         btnsave_toutils= (Button) findComponentById(ResourceTable.Id_save_toutils); 
  46.         btn_read_list= (Button) findComponentById(ResourceTable.Id_read_list); 
  47.         databaseHelper = new DatabaseHelper(context); 
  48.         filename = "pdb"
  49.         preferences = databaseHelper.getPreferences(filename); 
  50.         btnWrite(); 
  51.         btnRead(); 
  52.         btnDelete(); 
  53.         btnSavelist(); 
  54.         btnSavetoutils(); 
  55.         btnReadList(); 
  56.     } 
  57.     /*** 
  58.      *  写入数据 
  59.      * 
  60.      * 
  61.      */ 
  62.     private void btnWrite() { 
  63.         btnWrite.setClickedListener(new Component.ClickedListener() { 
  64.             @Override 
  65.             public void onClick(Component component) { 
  66.                 String fruit = textFiledFruit.getText(); 
  67.                 try { 
  68.                     int number = Integer.parseInt(textFiledNumber.getText()); 
  69.                     preferences.putInt("number",number); 
  70.                     preferences.putString("fruit",fruit); 
  71.                     preferences.flush(); 
  72.                     new ToastDialog(context).setText("Write to DB file success").show(); 
  73.                 } catch (NumberFormatException e) { 
  74.                     new ToastDialog(context).setText("Please input number in Number row").show(); 
  75.                 } 
  76.             } 
  77.         }); 
  78.     } 
  79.  
  80.     /*** 
  81.      * 
  82.      * 读取数据 
  83.      * 
  84.      */ 
  85.     private void btnRead() { 
  86.         btnRead.setClickedListener(new Component.ClickedListener() { 
  87.             @Override 
  88.             public void onClick(Component component) { 
  89.                 String string = String.format(Locale.ENGLISH,"Fruit: %s,Number: %d"
  90.                         preferences.getString("fruit"""),preferences.getInt("number", 0)); 
  91.                 new ToastDialog(context).setText(string).show(); 
  92.             } 
  93.         }); 
  94.     } 
  95.  
  96.     /** 
  97.      * 删除数据 
  98.      * 
  99.      */ 
  100.     private void btnDelete() { 
  101.         btnDelete.setClickedListener(new Component.ClickedListener() { 
  102.             @Override 
  103.             public void onClick(Component component) { 
  104.                 if (databaseHelper.deletePreferences(filename)) { 
  105.                     preferences.clear(); 
  106.                     new ToastDialog(context).setText("Delete DB file success").show(); 
  107.                 } else { 
  108.                     new ToastDialog(context).setText("Delete DB file failed").show(); 
  109.                 } 
  110.             } 
  111.         }); 
  112.     } 
  113.  
  114.     /*** 
  115.      * 
  116.      * 缓存list 集合类型数据 
  117.      * 
  118.      */ 
  119.     private void btnSavelist() { 
  120.  
  121.       btnsavelist.setClickedListener(new Component.ClickedListener() { 
  122.           @Override 
  123.           public void onClick(Component component) { 
  124.               UserBean userBean=new UserBean(); 
  125.               userBean.setUsername("test"); 
  126.               userBean.setPassword("123456"); 
  127.               List<UserBean> datalist=new ArrayList<>(); 
  128.               datalist.add(userBean); 
  129.               DataBaseUtil.putSelectBean(context,datalist,"datalist"); 
  130.               new ToastDialog(context).setText("写入成功").show(); 
  131.  
  132.           } 
  133.       }); 
  134.     } 
  135.     /*** 
  136.      * 
  137.      * 调用工具类方法存储 
  138.      */ 
  139.     private void btnSavetoutils() { 
  140.      btnsave_toutils.setClickedListener(new Component.ClickedListener() { 
  141.          @Override 
  142.          public void onClick(Component component) { 
  143.  
  144.              String fruit = textFiledFruit.getText(); 
  145.              try { 
  146.                  int number = Integer.parseInt(textFiledNumber.getText()); 
  147.                  DataBaseUtil.setParam(context,"number",number); 
  148.                  DataBaseUtil.setParam(context,"fruit",fruit); 
  149.                  new ToastDialog(context).setText("写入成功").show(); 
  150.              } catch (NumberFormatException e) { 
  151.                  new ToastDialog(context).setText("Please input number in Number row").show(); 
  152.              } 
  153.  
  154.          } 
  155.      }); 
  156.     } 
  157.     /*** 
  158.      * 
  159.      * 读取list 集合类型数据 
  160.      * 
  161.      */ 
  162.     private  void  btnReadList(){ 
  163.         btn_read_list.setClickedListener(new Component.ClickedListener() { 
  164.             @Override 
  165.             public void onClick(Component component) { 
  166.  
  167.                 List<UserBean>getData= (List<UserBean>) DataBaseUtil.getSelectBean(context,"datalist"); 
  168.                 UserBean userBean= getData.get(0); 
  169.                 new ToastDialog(context).setText(userBean.getUsername()+userBean.getPassword()).show(); 
  170.             } 
  171.         }); 
  172.     } 

 bean 类

  1. package com.example.datademo.bean; 
  2. /*** 
  3.  * 
  4.  * 创建人:xuqing 
  5.  * 创建时间:2021年6月20日20:54:28 
  6.  * 类说明:用户账号密码  bean类 
  7.  * 
  8.  * 
  9.  */ 
  10.  
  11. public class UserBean { 
  12.     private  String username; 
  13.     private  String password
  14.  
  15.     public UserBean() { 
  16.     } 
  17.  
  18.     public UserBean(String username, String password) { 
  19.         this.username = username; 
  20.         this.password = password
  21.     } 
  22.  
  23.     public String getUsername() { 
  24.         return username; 
  25.     } 
  26.  
  27.     public void setUsername(String username) { 
  28.         this.username = username; 
  29.     } 
  30.  
  31.     public String getPassword() { 
  32.         return password
  33.     } 
  34.  
  35.     public void setPassword(String password) { 
  36.         this.password = password
  37.     } 
  38.  
  39.     @Override 
  40.     public String toString() { 
  41.         return "UserBean{" + 
  42.                 "username='" + username + '\'' + 
  43.                 ", password='" + password + '\'' + 
  44.                 '}'
  45.     } 

工具类核心代码

  1. package com.example.datademo.utils; 
  2. import com.example.datademo.bean.UserBean; 
  3. import com.google.gson.Gson; 
  4. import com.google.gson.reflect.TypeToken; 
  5. import ohos.app.Context; 
  6. import ohos.data.DatabaseHelper; 
  7. import ohos.data.preferences.Preferences; 
  8. import java.io.*; 
  9. import java.lang.reflect.Type; 
  10. import java.util.List; 
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17. public class DataBaseUtil { 
  18.  
  19.     private static  String filename = "pdb"
  20.     private static  Preferences preferences; 
  21.     private static  DatabaseHelper databaseHelper; 
  22.  
  23.     /** 
  24.      * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 
  25.      * 
  26.      * @param context 
  27.      * @param key 
  28.      * @param object 
  29.      * @param :DataBaseUtil.setParam(this, "key""value"); 
  30.      *                                               key -- userid / accountId obj== 
  31.      */ 
  32.     public static void setParam(Context context, String key, Object object) { 
  33.         String type = "String"
  34.         if (object != null) { 
  35.             type = object.getClass().getSimpleName(); 
  36.         } 
  37.         databaseHelper = new DatabaseHelper(context); 
  38.         preferences = databaseHelper.getPreferences(filename); 
  39.  
  40.         if ("String".equals(type)) { 
  41.             preferences.putString(key, (String) object); 
  42.         } else if ("Integer".equals(type) || "int".equals(type)) { 
  43.             preferences.putInt(key, (Integer) object); 
  44.         } else if ("Boolean".equals(type) || "boolean".equals(type)) { 
  45.             preferences.putBoolean(key, (Boolean) object); 
  46.         } else if ("Float".equals(type) || "float".equals(type)) { 
  47.             preferences.putFloat(key, (Float) object); 
  48.         } else if ("Long".equals(type) || "long".equals(type)) { 
  49.             preferences.putLong(key, (Long) object); 
  50.         } 
  51.         preferences.flush(); 
  52.     } 
  53.  
  54.     /** 
  55.      * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 
  56.      * 
  57.      * @param context 
  58.      * @param key                                             关键字 
  59.      * @param defaultObject                                   若取回空值则返回此默认值 
  60.      * @param :DataBaseUtil.getParam(Activity.this, "key""defaultValue"); 
  61.      * @return 
  62.      */ 
  63.     public static Object getParam(Context context, String key, Object defaultObject) { 
  64.         String type = "String"
  65.         if (defaultObject != null) { 
  66.             type = defaultObject.getClass().getSimpleName(); 
  67.         } 
  68.         databaseHelper = new DatabaseHelper(context); 
  69.         preferences = databaseHelper.getPreferences(filename); 
  70.         if ("String".equals(type)) { 
  71.             return preferences.getString(key, (String) defaultObject); 
  72.         } else if ("Integer".equals(type) || "int".equals(type)) { 
  73.             return preferences.getInt(key, (Integer) defaultObject); 
  74.         } else if ("Boolean".equals(type) || "boolean".equals(type)) { 
  75.             return preferences.getBoolean(key, (Boolean) defaultObject); 
  76.         } else if ("Float".equals(type) || "float".equals(type)) { 
  77.             return preferences.getFloat(key, (Float) defaultObject); 
  78.         } else if ("Long".equals(type) || "long".equals(type)) { 
  79.             return preferences.getLong(key, (Long) defaultObject); 
  80.         } 
  81.         return null
  82.     } 
  83.  
  84.     //删除数据 
  85.     public static void removeParam(Context context,  Object defaultObject) { 
  86.         databaseHelper = new DatabaseHelper(context); 
  87.         preferences = databaseHelper.getPreferences(filename); 
  88.         preferences.clear(); 
  89.     } 
  90.  
  91.     /** 
  92.      * 4.存储list 
  93.      */ 
  94.     public static void putSelectBean(Context context, List<UserBean> phoneList, String key) { 
  95.         databaseHelper = new DatabaseHelper(context); 
  96.         preferences = databaseHelper.getPreferences(filename); 
  97.         Gson gson = new Gson(); 
  98.         String json = gson.toJson(phoneList); 
  99.         preferences.putString(key, json); 
  100.         preferences.flush(); 
  101.     } 
  102.  
  103.  
  104.     /** 
  105.      * 读取list 
  106.      */ 
  107.     public static List<UserBean> getSelectBean(Context context, String key) { 
  108.         databaseHelper = new DatabaseHelper(context); 
  109.         preferences = databaseHelper.getPreferences(filename); 
  110.         Gson gson = new Gson(); 
  111.         String json = preferences.getString(keynull); 
  112.         Type type = new TypeToken<List<UserBean>>() { 
  113.         }.getType(); 
  114.         List<UserBean> arrayList = gson.fromJson(json, type); 
  115.         return arrayList; 
  116.     } 
  117.     //存数据到SD卡里面 
  118.     public static void storetosd(File file, List<UserBean> data) { 
  119.         try { 
  120.             Gson gson = new Gson(); 
  121.             String json = gson.toJson(data); 
  122.             OutputStream os = new FileOutputStream(file); 
  123.             os.write(json.getBytes("utf-8")); 
  124.             os.close(); 
  125.         } catch (Exception e) { 
  126.             e.printStackTrace(); 
  127.         } 
  128.     } 
  129.  
  130.     //读取SD卡里面的数据 
  131.     public static List<UserBean> readbysd(File file) { 
  132.         List<UserBean> arrayList = null
  133.         Gson gson = new Gson(); 
  134.         try { 
  135.             InputStream is = new FileInputStream(file); 
  136.             byte[] data = new byte[is.available()]; 
  137.             is.read(data); 
  138.             String content = new String(data, "utf-8"); 
  139.             Type type = new TypeToken<List<UserBean>>() { 
  140.             }.getType(); 
  141.             arrayList = gson.fromJson(content, type); 
  142.             is.close(); 
  143.         } catch (Exception e) { 
  144.             e.printStackTrace(); 
  145.         } 
  146.         return arrayList; 
  147.     } 

到此DatabaseHelper基本就讲完了,恭喜你看完此文你就会掌握了鸿蒙轻量级数据库DatabaseHelper的用法和使用技巧。

最后总结

鸿蒙的 DatabaseHelper轻量级数据库和安卓的 sharepreferences 用法和类似都是默认只能存储基本数据类型。但是鸿蒙提供了 flush 和 flushSync 两个方法 将Preferences实例持久化。 flush()会立即更改内存中的Preferences对象,但会将更新异步写入磁盘。flushSync()更改内存中的数据的同时会将数据同步写入磁盘。由于flushSync()是同步的,建议不要从主线程调用它,以避免界面卡顿。 这里和安卓还是有些许区别,同学们要注意。使用起来 DatabaseHelper也比较方便和简单。以及一些非基本数据类型怎么转化来存储我也讲到,同学有兴趣可以下载代码来看看。最后希望我的文章能帮助到各位解决问题 ,以后我还会贡献更多有用的代码分享给大家。

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2021-08-31 14:58:52

鸿蒙HarmonyOS应用

2022-08-31 12:48:48

TinyDBPython数据库

2023-11-24 11:11:08

Python数据库

2022-07-14 11:31:04

SQLToolsVScode数据库

2023-12-13 08:22:45

SQLite关系型数据库

2013-02-20 14:54:03

C#.NETNDatabase

2022-05-16 07:37:58

SQL 编辑器数据库管理工具

2024-03-05 18:40:15

LiteDB数据库NoSQL

2022-08-10 12:21:07

PythonWebBottle

2011-03-10 11:17:03

数据库设计技巧

2018-07-19 11:18:45

饿了么时序数据库监控系统

2010-05-14 09:57:25

MySQL数据库

2011-04-20 14:28:38

SQL优化

2020-11-11 12:13:59

JS

2011-08-23 17:33:00

SQLAndroid

2009-07-17 14:38:51

轻量级Swing组件

2009-07-14 18:05:28

轻量级Swing组件

2011-03-22 16:31:35

Access数据库

2013-05-15 10:20:16

Paas虚拟化

2023-12-07 15:09:23

点赞
收藏

51CTO技术栈公众号