【问题标题】:Java native query - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorExceptionJava 原生查询 - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
【发布时间】:2016-10-25 17:07:03
【问题描述】:

我收到以下错误:“com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,以了解在“卡片”附近使用的正确语法。查找前缀'"

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 时,它工作得很好。

【问题讨论】:

    标签: java jakarta-ee nativequery


    【解决方案1】:

    应使用 createNamedQuery,而不是 createNativeQuery。

    来自EntityManager JavaDoc

    createNativeQuery(String sqlString)

    创建 Query 实例以执行本机 SQL 语句,例如更新或删除。

    createNamedQuery(字符串名称)

    创建 Query 实例以执行命名查询(使用 Java Persistence 查询语言或本机 SQL)。

    因此,在您的代码中,您正在执行查询名称“查找...”作为 SQL 查询。

    正确的:

    Query q = em.createNamedQuery("Card.findPrefix");
    

    【讨论】:

      【解决方案2】:

      最终代码为:

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

      【讨论】:

        猜你喜欢
        • 2015-09-23
        • 2012-04-20
        • 2013-11-20
        • 2016-07-07
        • 2015-01-22
        • 2018-04-26
        • 2018-04-25
        • 2012-07-20
        • 2011-12-15
        相关资源
        最近更新 更多