2015-03-13 98 views
0

我在写一个通用的Java代码,我想将整数添加到将存储在mysql数据库中的min Heap中。对于我写了下面的代码,如何将ResultSet对象转换为Comparable对象

public void addElement(Comparable value) { 

    sql = "INSERT INTO testHeap VALUES("+size+","+(int)value+ ") "; 
    try { 
     stmt.executeUpdate(sql); 
     size++; 
    } catch (SQLException ex) { 
     Logger.getLogger(HeapMySql.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    if(size == 0) throw new IllegalStateException("Shape error"); 
int index = size - 1; 
while(size != 0) { 

     sql = "SELECT value FROM testHeap WHERE indexnum ="+index; 
     T val; 
     try { 
      val = (T)stmt.executeQuery(sql); 
       if(myParent(index).compareTo(val) <= 0) break; 

        swap(parent(index), index); 
        index = parent(index); 
     } catch (SQLException ex) { 
      Logger.getLogger(HeapMySql.class.getName()).log(Level.SEVERE, null, ex); 
     } 

} 
} 

这将返回下面的异常运行时

异常在线程“主要” java.lang.ClassCastException:com.mysql.jdbc.JDBC4ResultSet不能转换为Java。 lang.Comparable 在Lab03.HeapMySql.addElement(HeapMySql.java:140)

我婉知道如何做到这一点 “VAL =(T)stmt.executeQuery(SQL)” 正确:)

+0

你不能,因为它不是'Comparable.' XY问题。 'ResultSet'不能被转换成任何东西。你究竟在努力完成什么? – EJP 2015-03-14 08:43:46

回答

1

您需要在结果集(即使只有一个)

val = (T)new Integer(stmt.executeQuery(sql).getInt(1)); 

至于指定列您在下面评论过,您需要结果集中的活动行。

您还需要在完成后关闭它,否则将耗尽数据库游标。读取最后一行(使用rs.next)将自动关闭它,所以我使用“while”而不是“if”。

ResultSet rs = stmt.executeQuery(sql); 
while (rs.next()) { 
    val = (T)new Integer(rs.getInt(1))) 
} 
+0

这是因为我在>中的类名(: – Dina 2015-03-14 01:53:42

+0

),因此它不工作,因为它不像我想的那样自动装箱。修改后的答案,它用一个整数 – 2015-03-14 07:18:10

+0

包装,这个din't不管用。后来一些挖掘后,我发现查询的结果应该放入一个新的结果集对象。让我们说它是ResultSet rs = stmt.executeQuery( sql).getInt(1);在提取任何特定的值之前,我应该检查wheather rs.next()返回true – Dina 2015-03-15 08:24:53

0

的ResultSet将所有结果作为一个数组中的Object,它不是t他自己结果!你必须把每一个单独的类型转换成它的类型。此外,ResultSet也可以用来轻松更改回数据库。所以你根本没有得到jdbc的概念^^你应该阅读一些教程,一般如何使用jdbc。 如需进一步的帮助,请让您的问题更好理解。我们无法知道哪条线是140(从错误),我认为:

if(myParent(index).compareTo(val) <= 0) break; 
+0

line 140 is val =(T)stmt.executeQuery(sql) – Dina 2015-03-14 01:51:08