【问题标题】:ResultSet to Integer array in JavaJava中的ResultSet到整数数组
【发布时间】:2012-11-24 16:50:57
【问题描述】:

如何将 ResultSet 转换为 Integer 数组? 我真的需要一个整数数组。没有列表或类似的东西。

ResultSet rs = sqlite.query("SELECT ores FROM testtable WHERE nicknames='"+"testname"+"';");

“ores”包含用空格分隔的8个整数:10 20 30 40 50 60 70 80

编辑: "ores" 存储为 VARCHAR

【问题讨论】:

  • ores 是一个整数列,您需要 8 行,或者 ores 是一个字符串,其中包含 8 个值,由空格分隔?
  • 忘了说对不起。 “ores”存储为 VARCHAR。

标签: java sql arrays integer resultset


【解决方案1】:

ResultSet 是您查询的结果,如果要将其转换为 ArrayList 或简单的 Integer 数组,您可以遍历 ResulstSet 并将所有非空对象添加到 ArrayList 或数组中。这是一个简单的解决方案...

【讨论】:

  • @downvoter:不说为什么就投反对票是没用的!最后,您可以从该 ArrayList 中创建一个数组。
  • @Ingo:请参阅此处了解如何从 ArrayList 中创建数组:docs.oracle.com/javase/6/docs/api/java/util/…
  • 我认为这被否决了,因为你只有一行。您需要从该行中拆分字符串,并将每个字符串转换为整数,然后添加到列表/数组中。
  • 那还不是很清楚。他只是说它存储在varchar中。
  • 嗯...没关系。我现在切换到 8 列,而不是将 8 个整数存储在一个 varchar 中。
【解决方案2】:

可能是这样的:

rs.last(); 
rowcnt = myResultSet.getRow(); // get row no.
rs.beforeFirst();

int i = 0;  
Integer[] options = new Integer[rowcnt];  
while (rs.next()) {  
  options[i] = Integer.parseInt(rs.getString(i));  
  i++;  
}  

【讨论】:

  • 用列数初始化arraysize,然后遍历所有行将保证IndexOutOfBoundsExceptions。
  • 投影中只有一列。所以getColumnCount() 将始终返回 1。
  • 已更正 - 感谢 cmets。 (我理解反对票 - 如果现在还可以,也许它至少应该没有他们)
  • 最好再看两次... rs.last() 然后是 rs.next() ... :)
  • @Fildor 谢谢!是的,总比抱歉好..现在像我一样:)
【解决方案3】:
Vector<Integer> ores = new Vector<Integer>();
rs.beforeFirst();
while(rs.next()){ores.add(rs.getInt(1));}
Integer[] vals = ores.toArray(new Integer[0]);

【讨论】:

    【解决方案4】:

    错误的代码。我推荐一个 PreparedStatement:

    PreparedStatement ps = connection.prepareStatement("SELECT ores FROM testtable WHERE nicknames= ?");
    ps.setString(1, nickname);
    ResultSet rs = ps.executeQuery();
    List<Integer> values = new ArrayList<Integer>();
    while (rs.next()) {
        String ores = rs.getString("ores");
        String [] tokens = ores.split("\\s+");
        for (int i = 0; i < tokens.length; ++i) {
            values.add(Integer.valueOf(tokens[i]));
        }
    }
    

    【讨论】:

    • 我认为这行不通。他只有一排。您需要从第一行拆分字符串(使用空格分隔符),并将每个字符串转换为整数并添加到列表/数组中。
    • skynorth 是对的。那是行不通的,因为只有一排。该行存储为字符串 (VARCHAR),整数由空格分隔
    • 对我来说听起来像是一个糟糕的标准化设计。甚至不是第一个范式。无论如何,修复代码。
    猜你喜欢
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2013-11-21
    • 2012-10-09
    • 2019-01-11
    • 1970-01-01
    相关资源
    最近更新 更多