【问题标题】:How do I assign variables with values from a list?如何使用列表中的值分配变量?
【发布时间】:2011-08-20 15:22:17
【问题描述】:

我正在运行这段代码:

int key = 25;
String query = "Select one, two, three, four, five from myTable where key=?";
List<Map<String,Object>> data = jdbcTemplate.queryForList(query, new Object[]{key});

//one is string, two is int, three is character, four is double, five is string
String one = null;
int two = 0;
char three = '\u0000';
double four = 0.0;
String five = null;

我想用列表中返回的值设置上面的五个变量。怎么样?

【问题讨论】:

    标签: java jdbc jdbctemplate spring-jdbc


    【解决方案1】:

    我实际上并没有使用JDBCTemplate,但根据the documentationqueryForList 将返回Maps 的List,每个Map 中的键是列的名称。

    所以要从 first 返回的行中分配这些变量:

    Map<String,Object> row = data.get(0);
    String one  = (String)row.get("one");
    
    //these will not work -- Integer, Double incompatible with String
    /* int two     = ((Integer)row.get("two")).intValue();
    double four = ((Double)row.get("four")).doubleValue(); */
    
    //correct method
    int two     = Integer.parseInt((String)row.get("two"));
    double four = Double.parseDouble((String)row.get("four"));
    
    char three  = ((Character)row.get("three")).charValue();
        String five = (String)row.get("five");
    

    如您所见,对于对象类型,您应该只能进行强制转换。对于基元,我已转换为等效对象,然后使用该对象等效的方法来获取底层基元(因此对于int,转换为Integer,然后使用intValue)。

    【讨论】:

    • two = (int)row.get("two") 会抛出错误。因为值是一个对象。对 int 解析的对象无效。
    • @Nikunj:谢谢,你正在阅读这篇文章的第一个副本,在我清晨的大脑中,它依赖于自动装箱。但是自动装箱在这里不适用,所以我修复了它。 :-)
    • @T. J. Crowder:谢谢.. 它奏效了.. 在牧场上发布了答案,并感谢您:) :)
    • @Nikunj:谢谢。我认为实际解析整数等的需要取决于表中列的定义。我希望INT 列以Integer 的形式出现(否则,queryForList 可以定义为只返回List&lt;Map&lt;String,String&gt;&gt; 而不是List&lt;Map&lt;String,Object&gt;&gt;)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多