我正在编写一个通用的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)”:)
答案 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;