Java本机查询 - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

时间:2016-06-23 11:28:53

标签: java java-ee nativequery

我收到以下错误:“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输入此查询时,它可以很好地工作。

2 个答案:

答案 0 :(得分:2)

使用应该使用createNamedQuery,而不是createNativeQuery。

来自EntityManager JavaDoc

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")
})