Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 准备语句错误_Java_Sql_Jdbc_Prepared Statement_Incompatibletypeerror - Fatal编程技术网

Java 准备语句错误

Java 准备语句错误,java,sql,jdbc,prepared-statement,incompatibletypeerror,Java,Sql,Jdbc,Prepared Statement,Incompatibletypeerror,最近,出于安全考虑,我刚刚将SQL中的语句更改为预处理语句,下面是我的想法 不幸的是,它在屏幕上出现了一个找不到错误 "SELECT * FROM owner WHERE username = ? AND" + "password = ?;"; 整个错误: 找不到符号: 符号:方法prepareStatement(java.lang.String) 位置:HolidayExchange.dbAccess类型的变量dbAccess 我意识到,当字符串应该是preparedstatement时,

最近,出于安全考虑,我刚刚将SQL中的语句更改为预处理语句,下面是我的想法

不幸的是,它在屏幕上出现了一个找不到错误

"SELECT * FROM owner WHERE username = ? AND" + "password = ?;"; 
整个错误:

找不到符号: 符号:方法prepareStatement(java.lang.String) 位置:HolidayExchange.dbAccess类型的变量dbAccess

我意识到,当字符串应该是preparedstatement时,它是在查找字符串,但我在示例中总是这样看的

我可能在做一些愚蠢的事情,但任何帮助解决这个问题都会非常有帮助

整个方法:

DBAccess DBAccess=新的DBAccess()


缺少一个空间

      // becomes ANDpassword in the resulting string:
     "SELECT * FROM owner WHERE username = ? AND" + "password = ?;"; 
应该是

     // space added before passsword:
     "SELECT * FROM owner WHERE username = ? AND" + " password = ?;"; 

缺少一个空间

      // becomes ANDpassword in the resulting string:
     "SELECT * FROM owner WHERE username = ? AND" + "password = ?;"; 
应该是

     // space added before passsword:
     "SELECT * FROM owner WHERE username = ? AND" + " password = ?;"; 

对于每个问号,尝试在其周围加上单引号

 '?'

对于每个问号,尝试在其周围加上单引号

 '?'
在执行查询之前,请始终记录ps.toString()。这将让程序员知道实际执行了什么查询

此外,PreparedStatement不是字符串

连接con=null; Class.forName(“com.mysql.jdbc.Driver”); con=DriverManager.getConnection(“jdbc:mysql:localhost:3306/jdbcttutorial”、“root”、“root”); PrepareStatement ps=con.PrepareStatement(sqlQuery)

在执行查询之前,始终记录ps.toString()。这将让程序员知道实际执行了什么查询

此外,PreparedStatement不是字符串

连接con=null; Class.forName(“com.mysql.jdbc.Driver”); con=DriverManager.getConnection(“jdbc:mysql:localhost:3306/jdbcttutorial”、“root”、“root”); PrepareStatement ps=con.PrepareStatement(sqlQuery)

找不到symbol:symbol:method prepareStatement(java.lang.String) 位置:HolidayExchange.dbAccess类型的变量dbAccess

此错误消息与格式错误的SQL无关。这是一个编译时错误。HolidayExchange.DBAccess类没有将java.lang.String作为参数的名为prepareStatement的方法

您的SQL在编译时未被验证(或评估),因此它不能成为编译时错误的原因。一旦编译完成,您可能会发现,在删除了围绕问号的单引号之后,您的查询就可以正常工作了

找不到symbol:symbol:method prepareStatement(java.lang.String) 位置:HolidayExchange.dbAccess类型的变量dbAccess

此错误消息与格式错误的SQL无关。这是一个编译时错误。HolidayExchange.DBAccess类没有将java.lang.String作为参数的名为prepareStatement的方法


您的SQL在编译时未被验证(或评估),因此它不能成为编译时错误的原因。一旦您将其编译好,您可能会发现,在删除了围绕问号的单引号之后,您的查询就会正常工作。

如果您有import
com.mysq.jdbc.*删除它并将其更改为

导入
java.sql.PreparedStatement
因此反之亦然,因为我认为您正在使用的PreparedStatement方法不适合您正在连接的数据库。

如果您有import
com.mysq.jdbc.*删除它并将其更改为


导入
java.sql.PreparedStatement因此反之亦然,因为我认为您正在使用的PreparedStatement方法不适合您正在连接的数据库。

oops,谢谢,这有点愚蠢。虽然主要的问题是不兼容的类型,但是看起来您的用户名和密码绑定顺序不对。也不要认为语句末尾的分号是必要的。哎呀,谢谢你,这有点愚蠢。虽然主要的问题是不兼容的类型,但是看起来您的用户名和密码绑定顺序不对。也不要认为语句末尾的分号是必要的。我的DBaccess类处理所有数据库连接。我将粘贴新代码以查看您的想法。尽管我的DBaccess类处理所有的数据库连接,但我仍然收到一个错误,说它找不到符号。我将粘贴新代码以查看您的想法。我仍然收到一个错误,说它找不到符号,真的吗?这难道不是在您已经指定绑定类型之后要求服务器执行隐式强制转换吗?别以为我会这么做。或者我遗漏了什么。我同意格伦的观点,很确定你不需要“真的吗?”?这难道不是在您已经指定绑定类型之后要求服务器执行隐式强制转换吗?别以为我会这么做。或者我遗漏了一些东西。我同意Glen的观点,非常确定您不需要“DBAcces的完整包名是什么?”?检查javadoc是否显示它是否支持“prepareStatement”。public DBAccess()抛出ServletException{this.getConnection();},它引用getConnection()方法,该方法仅获取到数据库的连接,并且100%工作。基本上,所有数据库访问都放在它自己的类中。DBAccess()方法是引用私有方法getConnection()的公共方法。它所做的一切就是获得DB的连接。在这个类中,还有用于特定执行查询和更新查询的方法。看起来DBAccess没有公共的prepareStatement,这就是所调用的。DBAccess的完整包名是什么?检查javadoc是否显示它是否支持“prepareStatement”。public DBAccess()抛出ServletException{this.getConnection();},它引用getConnection()方法,该方法仅获取到数据库的连接,并且100%工作。基本上,所有数据库访问都放在它自己的类中。DBAccess()方法是引用私有方法getConnection()的公共方法。它所能做的就是得到