我看到了将旧系统优化的方法存储到数据库行应用程序设置中。像这样
10 - enabled option 1;
12 - enabled option 2;
13 - enabled option 3;
整个数字都以101213的形式存储在数据库中。您知道此模式的名称是什么,并且有Java教程吗?
答案 0 :(得分:2)
请勿将设置以某种巧妙的编码方式保存在一个值中,而应将其简单地连接为值或进行位编码。处理这些值很复杂。
而是将值保存在每个设置都有其自己的行的表中,该行可能看起来像这样:
+----+---------------+-------+
| id | setting | value |
+----+---------------+-------+
| 1 | SomeSetting | 42 |
| 2 | AnotherOne | true |
| 3 | SomethingElse | 4.56 |
| .. | ... | ... |
+--------------------+-------+
这样,您可以简单地运行SELECT
语句来获取所有/一个设置,并使用UPDATE
语句来更改值。您甚至可以考虑将值保存在不同的列类型中,以便以所需的正确类型获取所需的值,而不是将其解析/转换为所需的类型。
答案 1 :(得分:1)
这是一种简单的数据压缩,因此您可以简单地测试是否通过yourline.indexOf("your_option")>-1
启用了选项
我建议使用每个选项每行1行的表,但是如果您真的想让一个包含所有选项的项目,则更好的方法是对每个选项使用一点-前一种方法可能会导致错误(如果您有100个以上的选项,则101表示启用10和1或101?-
要明智地进行操作,可以使用BigDecimal:
// Let's say you get a String representing your option from your database
String optionFromDB=...;
// optionFromDB is a number like "132456"
// We transform it to bigDecimal:
BigDecimal myOptions=new BigDecimal(optionFromDB);
// Then we can use it.
// enable the option X (X is a number)
myOptions.setBit(x);
// Disable option X
myOptions.clearBit(x);
// Save the options to the db:
String newValToSave=myOptions.toString();
// do something if option x enable:
if (myOptions.testBit(x)){ .... }
在这里,我将BigDecimal保存为字符串,但是您也可以将其直接存储为DB上的数字。
答案 2 :(得分:0)
没有任何模式。似乎有人确实在空间不足,并且愿意牺牲空间的可读性。恕我直言,这不是一个特别好的解决方案。
当然,您可以这样做-您只需要两种方法:一种是将选项保存到数据库时将选项转换为字符串,另一种方法是在读取时将字符串转换为选项它。
但是,我建议一种更好的方法-撕毁完整对,例如"OptionA", "true"
或单个字符串(OptionA=true
)。然后,您可以使用java.util.Properties
的许多好处,并且获得可以在不同项目中重用的代码。