Eclipse Java JDBC报错:executeQuery()空参不适用?照搬课程代码出错
编译报错的核心原因
- 触发报错的本质是Java静态编译的类型检查规则:编译器校验方法调用合法性时,只看变量的声明类型,不看变量实际指向的运行时对象类型。
- 你的代码中预编译语句的变量声明为
Statement pstat = null;,把pstat的静态类型定义为父接口Statement。 Statement接口中仅定义了带字符串参数的查询方法executeQuery(String sql),没有无参重载的executeQuery()方法。- 虽然你后续给
pstat赋值的是connection.prepareStatement(...)返回的PreparedStatement子接口实例——这个子接口确实定义了无参的executeQuery()方法(因为SQL在预编译创建对象时已经传入,无需再次传参),但编译期不认这个运行时的对象类型,看到你调用无参的executeQuery()时,就会抛出对应报错:The method executeQuery(String) in the type Statement is not applicable for the arguments ()。
为什么照搬课程录屏还是报错
- 录屏中授课老师的对应变量声明一定是
PreparedStatement pstat = null;,和实际赋值的对象类型完全匹配,编译器可以识别到无参executeQuery()方法的定义,自然不会触发报错。 - 你抄录代码时漏看了变量声明的子接口类型,错写成了父接口
Statement,属于细节抄录偏差,不是代码逻辑本身的问题。
快速修正方案
- 将预编译语句的变量声明从
Statement pstat = null;修改为PreparedStatement pstat = null;,即可解决当前的编译报错。 - 附加提醒:你代码中遍历列名的for循环没有加代码块花括号,会导致后续的换行打印逻辑不在循环执行范围内,后续运行时会出现输出格式错位的问题,不属于当前编译报错的范畴,可以等编译通过后再调整。
内容的提问来源于stack exchange,提问作者megancrean
相关产品推荐
相关产品推荐

