不能使用executeQuery()

时间:2019-04-18 11:16:50

标签: java jdbc

我正在开发一个应用程序以从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();
}

1 个答案:

答案 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时,很容易发生这种情况(当一个类与使用的类名匹配时,如果一个类匹配,则会显示一个下拉列表以进行可能的导入。不幸的是,选择错误的导入是很常见的事情。)