我正在开发一个应用程序以从Database获取数据,但是我无法在代码中使用executeQuery
。
这是我的代码的例外:java.lang.ClassCastException: org.apache.derby.client.am.ClientStatement cannot be cast to java.beans.Statement
at Database.main(Database.java:28)
问题出在哪里?
Connection MyconObj=null;
Statement MystateObj =null;
ResultSet MyresObj = null;
try {
MyconObj = DriverManager.getConnection("jdbc:derby://localhost:1527/students", "root", "root");
MystateObj = (Statement) MyconObj.createStatement();
String query = "SELECT * FROM ROOT.INFORMATION";
ResultSet MyresObj = MystateObj.executeQuery(query);
while(MyresObj.next()){
int id = MyresObj.getInt("id");
String name = MyresObj.getString("name");
String lastname = MyresObj.getString("lastname");
System.out.println(id + "" + name + "" + lastname);
}
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:1)
这是一个经典示例,说明具有相同名称的类如何引起混乱和运行时异常:
MystateObj = (Statement) MyconObj.createStatement();
但是,基于抛出的异常,实现代码所使用的导入未包含在OP代码中
java.lang.ClassCastException: org.apache.derby.client.am.ClientStatement cannot be cast to java.beans.Statement
强制转换中使用的Statement
类是java.beans.Statement
,可能已导入。 MyconObj.createStatement()
返回的对象的类型为org.apache.derby.client.am.ClientStatement
,这会在运行时导致强制转换异常-返回的对象是java.sql.Statement
的扩展,如上面的注释所述(通过Mark Rotteveel)。
Statement
的导入是正确的,但是是从错误的库导入的。在使用允许自动导入生成的IDE时,很容易发生这种情况(当一个类与使用的类名匹配时,如果一个类匹配,则会显示一个下拉列表以进行可能的导入。不幸的是,选择错误的导入是很常见的事情。)