【问题标题】:Best way to save personal user settings who are used on java desktop application app and website保存在 java 桌面应用程序和网站上使用的个人用户设置的最佳方法
【发布时间】:2015-05-12 13:05:55
【问题描述】:

我正在创建一个应用程序,将所有用户设置存储到 MySQL 服务器中。但是现在当 tableOption3 = id25 时我得到了一些东西,然后用户主题是红色的。我已经有5张这样的桌子了。它会变得更大。用户可以使用移动应用程序来保存网站和 java 应用程序的个人设置,反之亦然。

我还有其他选择吗? 我一直想知道如果要加载 100 个个人选项会发生什么。用户是否会在加载速度方面注意到这一点。

【问题讨论】:

  • 你考虑过使用 NOSQL 数据库吗?
  • 如果您只想在桌面应用程序的登录/注销时加载和保存用户首选项,您可以将其保留在一个类中,然后在注销期间对其进行序列化,并在登录期间再次反序列化。不是那个时候,恕我直言,你甚至不会注意到加载 100 个偏好
  • 我没有使用 NoSQL 的经验。但是在这种情况下你为什么更喜欢 NOSQl?
  • @ziker 我一定会调查的。我们在课堂上使用过这个,但我可以简单地创建一个包含所有用户设置的类并将其存储到数据库中?
  • 这个问题应该可以帮助你stackoverflow.com/questions/1079711/…@Fazovsky 也提供了很好的答案

标签: java mysql


【解决方案1】:

您必须将这些个人用户设置保存在某处,并且您总是希望使用某种数据存储,例如:SQL databasesNOSQL、平面文件。
我认为 SQL 数据库通常是要走的路,拥有超过 100 个个人选项应该不会过多地降低性能。

但我的建议是避免使用多个表。您可以通过just one table 为所有用户存储所有属性,从而达到预期的效果,即:

 USER_ID | PROPERTY | PROPERTY_VALUE
 1       | COLOR    | RED
 2       | COLOR    | BLUE
 1       | FONT_SIZE| 12
 2       | FONT_SIZE| 14
etc

【讨论】:

  • 好主意,我一定会试一试的。看起来很有希望。
【解决方案2】:

如果您正在寻找 Java 的嵌入式解决方案,您可以尝试 jsup,这是一个用于在 SQL 数据库中存储和获取简单用户首选项的 Java 库。

我是 jsup 的作者,写了很多小应用程序/工具。我经常发现需要支持用户偏好,但没有找到适用于不同 SQL 数据库的合适库,所以我继续创建了 jsup。

它适用于各种常见的 SQL 数据库类型,并且易于上手:

Injector injector = Guice.createInjector(
    new AbstractModule() {
      @Override
      protected void configure() {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:h2:mem:testdb");
        HikariDataSource dataSource = new HikariDataSource(config);

        // Be sure to specify the correct dialect.
        bind(Key.get(SQLDialect.class, UserPreferencesModule.UserPreferences.class)).toInstance(SQLDialect.H2);
        bind(Key.get(DataSource.class, UserPreferencesModule.UserPreferences.class)).toInstance(dataSource);
      }
    },
    new UserPreferencesModule());
UserPreferencesDb userPreferencesDb = injector.getInstance(UserPreferencesDb.class);
UserPreferencesAnalytics userPreferencesAnalytics = injector.getInstance(UserPreferencesAnalytics.class);

userPreferencesDb.setString("some-user", "ui", "theme", "default");
userPreferencesDb.setString("some-user", "ui", "display.timestamp.timezone", "UTC");
userPreferencesDb.addToSet("some-user", "app", "favorite.projects", ImmutableSet.of("prj1", "prj2"));
userPreferencesDb.setBoolean("some-user", "app", "email.on.failure", true);

System.out.println(userPreferencesDb.getString("some-user", "ui", "theme"));
System.out.println(userPreferencesDb.getString("some-user", "ui", "display.timestamp.timezone"));
System.out.println(userPreferencesDb.getSet("some-user", "app", "favorite.projects"));
System.out.println(userPreferencesDb.getBoolean("some-user", "app", "email.on.failure"));

System.out.println(userPreferencesAnalytics.getStringCategories());
System.out.println(userPreferencesAnalytics.getBooleanPreferencesByUser("app", "email.on.failure"));

除了用于存储和获取首选项的数据库界面外,还有一个分析界面可用于获取统计信息或更轻松地与其他工具集成。

GitHub 页面上有示例和更多文档。如果您有想要添加的内容,请开票。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多