【发布时间】:2015-04-26 05:51:03
【问题描述】:
我正在使用LIKE 关键字来查询具有单个搜索参数的表格。当我在 MySQL Workbench 中运行以下 sql 语句时,它按预期正常工作。
SET @search = 'B';
SELECT T.*,D.divisionname
FROM Township AS T INNER JOIN Division AS D ON T.divisionid=D.divisionid
WHERE T.townshipcode LIKE CONCAT('%', @search, '%') OR
T.townshipname LIKE CONCAT('%', @search, '%') OR
D.divisionname LIKE CONCAT('%', @search, '%')
ORDER BY T.townshipcode LIMIT 0,10
但是,当我使用JdbcTemplate 执行我的java 代码时,我得到了BadSqlGrammarException。以下是我的java代码:
public List<Township> getList(Integer pageNumber, Integer pageDisplayLength, String searchParameter) {
int start = ((pageNumber - 1) * pageDisplayLength);
String query = "";
if (null != searchParameter && !searchParameter.equals("")){
query = "SET @search = '" + searchParameter + "'; " +
"SELECT T.*,D.divisionname FROM Township AS T " +
"INNER JOIN Division AS D ON T.divisionid=D.divisionid " +
"WHERE T.townshipcode LIKE CONCAT('%', @search, '%') OR " +
"T.townshipname LIKE CONCAT('%', @search, '%') OR " +
"D.divisionname LIKE CONCAT('%', @search, '%') " +
"ORDER BY T.townshipcode LIMIT " + start + "," + pageDisplayLength;
}
else{
query = "SELECT T.*,D.divisionname FROM Township AS T " +
"INNER JOIN Division AS D ON T.divisionid=D.divisionid ORDER BY T.townshipcode LIMIT " + start + "," + pageDisplayLength;
}
List<Township> townshipList = getMultiRecords(query);
return townshipList;
}
以下是getMultiRecords 基类的方法:
protected List<T> getMultiRecords(String query){
List<T> listResult = jdbcTemplate.query(query, new RowMapper<T>(){
@Override
public T mapRow(ResultSet rs, int rowNum) throws SQLException {
T entity = readRecord(rs);
return entity;
}
});
return listResult;
}
这是我的BadSqlGrammarException 详细信息。
Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [SET @search = 'B'; SELECT T.*,D.divisionname FROM Township AS T INNER JOIN Division AS D ON T.divisionid=D.divisionid WHERE T.townshipcode LIKE CONCAT('%', @search, '%') OR T.townshipname LIKE CONCAT('%', @search, '%') OR D.divisionname LIKE CONCAT('%', @search, '%') ORDER BY T.townshipcode LIMIT 0,10]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT T.*,D.divisionname FROM Township AS T INNER JOIN Division AS D ON T.divis' at line 1
请帮我找出问题所在。
【问题讨论】:
标签: java mysql spring spring-jdbc