我收到以下错误:“com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;请查看与您的MariaDB服务器版本对应的手册,以便在'Card附近使用正确的语法。 findPrefix'“
for:
@NamedNativeQueries({
@NamedNativeQuery(name = "Card.findPrefix",
query = "SELECT DISTINCT(FLOOR(c
.number/10000)) FROM Card c")
})
public List<Integer> findPrefix(){
Query q = em.createNativeQuery("Card.findPrefix");
try{
return q.getResultList();
}catch(Exception ex){
ex.printStackTrace();
return null;
}
}
我无法理解我的错误在哪里,因为当我直接向Mysql输入此查询时,它可以很好地工作。
答案 0 :(得分:2)
使用应该使用createNamedQuery,而不是createNativeQuery。
createNativeQuery(String sqlString)
创建Query实例以执行本机SQL语句,例如,用于更新或删除。
createNamedQuery(字符串名称)
创建Query实例以执行命名查询(使用Java持久性查询语言或本机SQL)。
因此,在您的代码中,您正在执行查询名称&#39;查找....&#39;作为SQL查询。
正确的:
Query q = em.createNamedQuery("Card.findPrefix");
答案 1 :(得分:0)
最终代码是:
public List<Integer> findPrefix(){
Query q = em.createNamedQuery("Card.findPrefix");
List<Integer> res = new ArrayList<Integer>();
for(Object row : (List<Object>) q.getResultList()){
res.add(((BigInteger)row).intValue());
}
return res;
}
@NamedNativeQueries({
@NamedNativeQuery(name = "Card.findPrefix",
query = "SELECT DISTINCT(FLOOR(c.number/10000)) FROM Card c")
})