Java 本机查询 - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
Java native query - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
我收到以下错误:"com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '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 输入此查询时,它工作得很好。
使用应该使用createNamedQuery,而不是createNativeQuery。
createNativeQuery(String sqlString)
创建用于执行本机 SQL 语句的 Query 实例,例如更新或删除。
createNamedQuery(字符串名称)
创建用于执行命名查询的 Query 实例(使用 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")
})
我收到以下错误:"com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '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 输入此查询时,它工作得很好。
使用应该使用createNamedQuery,而不是createNativeQuery。
createNativeQuery(String sqlString)
创建用于执行本机 SQL 语句的 Query 实例,例如更新或删除。
createNamedQuery(字符串名称)
创建用于执行命名查询的 Query 实例(使用 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")
})