枚举数据库中的常量和动态值

枚举数据库中的常量和动态值,第1张

枚举数据库中的常量和动态

如果我正确理解的要求是:

  • 具有提供一些预定义值的MyType.byId(Integer id)方法
  • 还应该
    Type
    从数据库的表中动态扩展它

因此,枚举不能动态扩展,但是我们可以切换到一个类。

因此,紧贴您的代码可以编写如下代码:

import java.util.HashMap;import java.util.Map;public class MyType {    static Map<Integer, MyType> idMap = new HashMap<>();    static {        idMap.put(10, new MyType("First Type"));        idMap.put(20, new MyType("Second Type"));    }    private final String name;    private MyType(String name) {        this.name = name;    }    public String getName() {        return name;    }    public static MyType byId(Integer id) {        return idMap.get(id);    }    public static void addType(String name, Integer id) {        MyType lookup = byId(id);        if(lookup != null) { if(!lookup.getName().equals(name)) {     System.out.println("conflicting redefinition for id " + id + ": '" + name + "' vs '" + lookup.name + "'");     //handle... }        }        idMap.put(id, new MyType(name));    }}

测试数据

假设数据库中包含以下内容:

stephan=# select * from Type; id |    name     ----+------------- 30 | Third Type 10 | First Type 20 | Second Type(3 rows)

因此,在数据库中,我们具有id = 10和id = 20的预定义类型,还有id = 30的类型,默认情况下应用程序不知道。但是我们可以从数据库中填充类型。

测试用例

public static void main(String[] args) {    try {        Connection connection = createConnection();        try (connection) { populateTypes(connection);        }        MyType type;        type = MyType.byId(10);        System.out.println(type.getName());        type = MyType.byId(20);        System.out.println(type.getName());        type = MyType.byId(30);        System.out.println(type.getName());    } catch (Exception e) {        e.printStackTrace();    }}

JDBC示例

使用哪种实际的数据库技术来检索值都没有关系。这是JDBC的示例:

private static void populateTypes(Connection connection)        throws SQLException {    String sql = "SELECt * FROM type";    try (Statement st = connection.createStatement()) {        try (ResultSet rs = st.executeQuery(sql)) { while (rs.next()) {     int id = rs.getInt("id");     String name = rs.getString("name");     MyType.addType(name, id); }        }    }}

演示输出

First TypeSecond TypeThird Type

那是您要找的东西吗?



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5017028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存