使用 room sqlite db 存储键值对,如 sharedpreferences

Using room sqlite db for storing key value pairs like sharedpreferences

由于一些原因,我想用sqlite来代替sqlite 我可以使用房间数据库,创建一个名为 preferences 的 table,结构如下

|钥匙 |值 |

|键1 |值 1 |

|键2 |值 2 |

这种方法的问题是值列只能是文本,但我想存储 text/numbers

|钥匙 |价值 |输入 |

|键1 |值 1 |字符串 |

|键2 |值2 |整数 |

根据类型,我可以手动使用 Integer.parse(stringValue) ..

但这看起来像是我在重新发明轮子

还有其他我无法掌握的方法吗?

如果您的数据类型未定义,您可以使用 JSON 来存储您的数据,而不是自己存储数据类型,并确定您需要执行哪个解析函数。

在您的示例中,该值变为 JSON 编码字符串。因此,您可以存储任何数据类型并对其进行解析,一步到位,您不必关心数据类型。

例如,

|Key                       |Value        |
|aStringVariable           |"Hello"      |
|anIntVariable             |1            |
|aBooleanVariable          |true         |

您只需要在从数据库中检索数据时使用一个函数来解析 JSON 数据,并在存储数据时使用一个函数将数据编码为 JSON。

你没有提到你使用的是哪种语言,假设Java,你可以使用GJson - https://www.javatpoint.com/how-to-convert-string-to-json-object-in-java

由于您不知道数据的结构,因此在将 JSON 转换为对象时可以使用映射。似乎所有流行的 Java 库都支持这一点。

这是一个 link,它提供了有关如何使用 gson 和 jackson(以及其他一些)将 JSON 数据解析和反解析到地图中的更多详细信息 - Convert a JSON String to a HashMap

不确定为什么你不能使用 SharedPreferences 但是如果你想存储和检索原始类型,你可以在保存时使用 String 并在检索时解析它。 键 | someValue 存储为字符串。

读取此值时,如果您知道您期望什么,则可以将其解析为特定类型。