Java本机查询-com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
我收到以下错误:“com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;请查看与您的MariaDB服务器版本对应的手册,以了解在“Card.findPrefix”附近使用的正确语法。”Java本机查询-com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException,java,jakarta-ee,nativequery,Java,Jakarta Ee,Nativequery,我收到以下错误:“com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;请查看与您的MariaDB服务器版本对应的手册,以了解在“Card.findPrefix”附近使用的正确语法。” 用于: @命名请求({ @NamedNativeRequesty(name=“Card.findPrefix”, query=“选择不同的楼层(c .编号/10000),来自卡c) }) 公共列表findPrefix(){ 查询q
用于:
@命名请求({
@NamedNativeRequesty(name=“Card.findPrefix”,
query=“选择不同的楼层(c
.编号/10000),来自卡c)
})
公共列表findPrefix(){
查询q=em.createNativeQuery(“Card.findPrefix”);
试一试{
返回q.getResultList();
}捕获(例外情况除外){
例如printStackTrace();
返回null;
}
}
我不明白我的错误在哪里,因为当我直接向Mysql键入此查询时,它工作得非常好。Use应该使用createNamedQuery,而不是createNativeQuery 从 createNativeQuery(字符串sqlString) 创建用于执行本机SQL语句的查询实例,例如,用于update或delete createNamedQuery(字符串名称) 创建查询实例以执行命名查询(在Java持久性查询语言或本机SQL中) 因此,在您的代码中,您正在执行查询名称“Find…”作为SQL查询 正确的一个:
Query q = em.createNamedQuery("Card.findPrefix");
Use应使用createNamedQuery,而不是createNativeQuery 从 createNativeQuery(字符串sqlString) 创建用于执行本机SQL语句的查询实例,例如,用于update或delete createNamedQuery(字符串名称) 创建查询实例以执行命名查询(在Java持久性查询语言或本机SQL中) 因此,在您的代码中,您正在执行查询名称“Find…”作为SQL查询 正确的一个:
Query q = em.createNamedQuery("Card.findPrefix");
最终代码为:
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")
})
公共列表findPrefix(){
Query q=em.createNamedQuery(“Card.findPrefix”);
List res=new ArrayList();
对于(对象行:(列表)q.getResultList()){
res.add(((BigInteger)行).intValue());
}
返回res;
}
@命名请求({
@NamedNativeRequesty(name=“Card.findPrefix”,
query=“从卡片c中选择不同的(楼层(c.number/10000))
})
最终代码是:
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")
})
公共列表findPrefix(){
Query q=em.createNamedQuery(“Card.findPrefix”);
List res=new ArrayList();
对于(对象行:(列表)q.getResultList()){
res.add(((BigInteger)行).intValue());
}
返回res;
}
@命名请求({
@NamedNativeRequesty(name=“Card.findPrefix”,
query=“从卡片c中选择不同的(楼层(c.number/10000))
})