gpt4 book ai didi

java - org.apache.commons.dbcp.DelegatingPreparedStatement 无法转换为 com.mysql.jdbc.PreparedStatement

转载 作者:行者123 更新时间:2023-12-02 07:05:46 26 4
gpt4 key购买 nike

我正在尝试使用准备好的语句查询数据库,但是出现错误:org.apache.commons.dbcp.DelegatingPreparedStatement 无法转换为 com.mysql.jdbc.PreparedStatement。

导入

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import org.springframework.stereotype.Repository;


import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;

JDBC

public List<Crime> getCrimeList(Crime crime) {
String where_clause = "";

final List<Object> args = new ArrayList<Object>();
final StringBuilder whereClause = new StringBuilder();


if (crime.getCrimeDate()!= null){
whereClause.append(" and crime.crimeDate = ?");
args.add(crime.getCrimeDate());

}

if(crime.getCrimeDetails() != null){
whereClause.append(" and crime.crimeDetails = ?");
args.add(crime.getCrimeDetails());

}

..............

logger.debug("In getCrimeList()");
final String sql = "select crime.*, "+
"criminalSocialSecurityNumber,criminal.fName as criminalFName,criminal.lName as criminalLName,"+
"criminal.photo as criminalPhoto,criminal.dob as criminalDob,victimSocialSecurityNumber,"+
"victim.fName as victimFName,victim.lName as victimLName,victim.photo as victimPhoto, victim.dob as victimDob "+
"from tblcrimes crime "+
"left join tblcriminalcrime on crime.crimeRecNo = tblcriminalcrime.crimeRecNo "+
"left join tblvictimcrime on crime.crimeRecNo = tblvictimcrime.crimeRecNo "+
"inner join tblcitizens criminal on criminal.socialSecurityNumber = tblcriminalcrime.criminalSocialSecurityNumber "+
"inner join tblcitizens victim on victim.socialSecurityNumber = tblvictimcrime.victimSocialSecurityNumber ";

logger.debug("Executing getCrimeList String "+sql);



List<Crime> crimeList = getJdbcTemplate().query(new PreparedStatementCreator(){

public java.sql.PreparedStatement createPreparedStatement(
java.sql.Connection connection) throws SQLException {

PreparedStatement ps =(PreparedStatement) connection.prepareStatement(sql + whereClause);
int i = 1;
for (Object arg : args) {
ps.setObject(i, arg);
i++;
}

return ps;
}
}, new CrimeMapper());



return crimeList;

}

错误

HTTP Status 500 - Request processing failed; nested exception is java.lang.ClassCastException: org.apache.commons.dbcp.DelegatingPreparedStatement cannot be cast to com.mysql.jdbc.PreparedStatement

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: org.apache.commons.dbcp.DelegatingPreparedStatement cannot be cast to com.mysql.jdbc.PreparedStatement

org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

root cause

java.lang.ClassCastException: org.apache.commons.dbcp.DelegatingPreparedStatement cannot be cast to com.mysql.jdbc.PreparedStatement
com.crimetrack.jdbc.JdbcCrimeDAO$2.createPreparedStatement(JdbcCrimeDAO.java:372)
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:581)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:637)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:662)
com.crimetrack.jdbc.JdbcCrimeDAO.getCrimeList(JdbcCrimeDAO.java:367)
com.crimetrack.service.CrimeManager.getCrimesList(CrimeManager.java:24)
com.crimetrack.web.CrimeRegistrationController.handelCrimeList(CrimeRegistrationController.java:229)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

最佳答案

上线:

PreparedStatement ps =(PreparedStatement) connection.prepareStatement(sql + whereClause);

您确定 PreparedStatementjava.sql.PreparedStatement 吗?

不确定为什么需要转换从 connection.prepareStatement() 返回的对象。此方法返回 java.sql.PreparedStatement 类型的对象。请检查您的导入语句是否正确导入了类。

关于java - org.apache.commons.dbcp.DelegatingPreparedStatement 无法转换为 com.mysql.jdbc.PreparedStatement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16135693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com