Zum Inhalt springen

Basic usage and tips of the HarmonyOS lightweight database DatabaseHelper

Creating a Database and Performing Operations

Creating a Database

To create a database, use the DatabaseHelper utility class. By calling the getPreferences(String name) method of DatabaseHelper, you can obtain a Preferences instance corresponding to a specific file name. This Preferences instance allows you to perform various database operations. The DatabaseHelper constructor requires a context parameter, which can be obtained by calling getContext() on an Ability or AbilitySlice instance, as both implement the ohos.app.Context interface. Preferences data is stored in files, so you must specify a non – empty file name without any path. The default storage directory can be retrieved using Context.getPreferencesDir().

Code:

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

Writing Data

Once you have the input from the text field, you can store the data using the put methods of the Preferences instance when the button is clicked. Use Preferences.putString(String var1, String var2) and Preferences.putInt(String var1, int var2) to write data. Call flush() or flushSync() to persist the Preferences instance. flush() immediately updates the in – memory Preferences object and writes changes to disk asynchronously, whereas flushSync() performs a synchronous write. Avoid calling flushSync() from the main thread to prevent UI lag.

Code:

private void btnWrite() {
    btnWrite.setClickedListener(new Component.ClickedListener() {
        @Override
        public void onClick(Component component) {
            String fruit = textFiledFruit.getText();
            try {
                int number = Integer.parseInt(textFiledNumber.getText());
                preferences.putInt("number", number);
                preferences.putString("fruit", fruit);
                preferences.flush();
                new ToastDialog(context).setText("Write to DB file success").show();
            } catch (NumberFormatException e) {
                new ToastDialog(context).setText("Please input number in Number row").show();
            }
        }
    });
}

Reading Data

Retrieve stored data using the get methods of Preferences. Use Preferences.getString(String var1, String var2) and Preferences.getInt(String var1, int var2), providing a key to get the corresponding value. If the key does not exist, a default value is returned, preventing potential exceptions.

Code:

private void btnRead() {
    btnRead.setClickedListener(new Component.ClickedListener() {
        @Override
        public void onClick(Component component) {
            String string = String.format(Locale.ENGLISH, "Fruit: %s, Number: %d",
                    preferences.getString("fruit", ""), preferences.getInt("number", 0));
            new ToastDialog(context).setText(string).show();
        }
    });
}

Deleting a Database

Delete a specific file using DatabaseHelper.deletePreferences(String name). After deletion, do not use the Preferences instance for further operations to avoid data inconsistency. For example, to delete the file named „pdb“:

Code:

private void btnDelete() {
    btnDelete.setClickedListener(new Component.ClickedListener() {
        @Override
        public void onClick(Component component) {
            if (databaseHelper.deletePreferences(filename)) {
                preferences.clear();
                new ToastDialog(context).setText("Delete DB file success").show();
            } else {
                new ToastDialog(context).setText("Delete DB file failed").show();
            }
        }
    });
}

Note: The lightweight preference database supports file creation, movement, data querying, insertion, deletion, and allows observers to monitor data changes.

Caching List Data

Since the lightweight DatabaseHelper cannot directly store lists, convert the list to a JSON string and store it. When retrieving, parse the JSON string back to a list.

Storing a List

Code:

public static void putSelectBean(Context context, List<UserBean> phoneList, String key) {
    databaseHelper = new DatabaseHelper(context);
    preferences = databaseHelper.getPreferences(filename);
    Gson gson = new Gson();
    String json = gson.toJson(phoneList);
    preferences.putString(key, json);
    preferences.flush();
}

Reading a List

Code:

public static List<UserBean> getSelectBean(Context context, String key) {
    databaseHelper = new DatabaseHelper(context);
    preferences = databaseHelper.getPreferences(filename);
    Gson gson = new Gson();
    String json = preferences.getString(key, null);
    Type type = new TypeToken<List<UserBean>>() {}.getType();
    List<UserBean> arrayList = gson.fromJson(json, type);
    return arrayList;
}

Storing a List

Code:

private void btnSavelist() {
    btnsavelist.setClickedListener(new Component.ClickedListener() {
        @Override
        public void onClick(Component component) {
            UserBean userBean = new UserBean();
            userBean.setUsername("test");
            userBean.setPassword("123456");
            List<UserBean> datalist = new ArrayList<>();
            datalist.add(userBean);
            DataBaseUtil.putSelectBean(context, datalist, "datalist");
            new ToastDialog(context).setText("Write success").show();
        }
    });
}

Reading a List

Code:

private void btnReadList() {
    btn_read_list.setClickedListener(new Component.ClickedListener() {
        @Override
        public void onClick(Component component) {
            List<UserBean> getData = DataBaseUtil.getSelectBean(context, "datalist");
            UserBean userBean = getData.get(0);
            new ToastDialog(context).setText(userBean.getUsername() + userBean.getPassword()).show();
        }
    });
}

Simplifying DatabaseHelper Usage with a Utility Class

Storing Data

Code:

private static String filename = "pdb";
private static Preferences preferences;
private static DatabaseHelper databaseHelper;

public static void setParam(Context context, String key, Object object) {
    String type = "String";
    if (object != null) {
        type = object.getClass().getSimpleName();
    }
    databaseHelper = new DatabaseHelper(context);
    preferences = databaseHelper.getPreferences(filename);

    if ("String".equals(type)) {
        preferences.putString(key, (String) object);
    } else if ("Integer".equals(type) || "int".equals(type)) {
        preferences.putInt(key, (Integer) object);
    } else if ("Boolean".equals(type) || "boolean".equals(type)) {
        preferences.putBoolean(key, (Boolean) object);
    } else if ("Float".equals(type) || "float".equals(type)) {
        preferences.putFloat(key, (Float) object);
    } else if ("Long".equals(type) || "long".equals(type)) {
        preferences.putLong(key, (Long) object);
    }
    preferences.flush();
}

Reading Data

Code:

public static Object getParam(Context context, String key, Object defaultObject) {
    String type = "String";
    if (defaultObject != null) {
        type = defaultObject.getClass().getSimpleName();
    }
    databaseHelper = new DatabaseHelper(context);
    preferences = databaseHelper.getPreferences(filename);
    if ("String".equals(type)) {
        return preferences.getString(key, (String) defaultObject);
    } else if ("Integer".equals(type) || "int".equals(type)) {
        return preferences.getInt(key, (Integer) defaultObject);
    } else if ("Boolean".equals(type) || "boolean".equals(type)) {
        return preferences.getBoolean(key, (Boolean) defaultObject);
    } else if ("Float".equals(type) || "float".equals(type)) {
        return preferences.getFloat(key, (Float) defaultObject);
    } else if ("Long".equals(type) || "long".equals(type)) {
        return preferences.getLong(key, (Long) defaultObject);
    }
    return null;
}

Using the Utility Class

Code:

private void btnSavetoutils() {
    btnsave_toutils.setClickedListener(new Component.ClickedListener() {
        @Override
        public void onClick(Component component) {
            String fruit = textFiledFruit.getText();
            try {
                int number = Integer.parseInt(textFiledNumber.getText());
                DataBaseUtil.setParam(context, "number", number);
                DataBaseUtil.setParam(context, "fruit", fruit);
                new ToastDialog(context).setText("Write success").show();
            } catch (NumberFormatException e) {
                new ToastDialog(context).setText("Please input number in Number row").show();
            }
        }
    });
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert