如何将ResultSet对象强制转换为Comparable对象

时间:2015-03-13 18:22:12

标签: java mysql casting resultset comparable

我正在编写一个通用的Java代码,我想将整数添加到一个最小的堆中,它将存储在一个mysql数据库中。为此,我写了下面的代码,

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);
        }

}
}

在运行时

中返回以下异常

线程“main”中的异常java.lang.ClassCastException:com.mysql.jdbc.JDBC4ResultSet无法强制转换为java.lang.Comparable     在Lab03.HeapMySql.addElement(HeapMySql.java:140)

我想知道如何正确地执行此操作“val =(T)stmt.executeQuery(sql)”:)

2 个答案:

答案 0 :(得分:1)

您需要在结果集中指定一列(即使只有一列)

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

如下所述,您需要在结果集中使用活动行。

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

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

答案 1 :(得分:0)

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

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