【问题标题】:Java throws "PersistenceException:SQLGrammarException: Could not extract resultset"Java 抛出“PersistenceException:SQLGrammarException:无法提取结果集”
【发布时间】:2019-08-10 23:38:20
【问题描述】:

我正在调用一个函数,该函数试图检查我的 MYSQL 表中是否存在特定记录。

功能:

 public String get_value(long nodeid,String ts) {
        try {
            String sql="Select URL FROM urllink WHERE URL="+"'f0='"+nodeid+"'&ts='"+ts;

            em.createNativeQuery(sql).getSingleResult();
            if (em == null) {
                throw new Exception("could not found URL object.");
            }
          //  return 1;

        } catch (Exception e) {
            e.printStackTrace();



        }
       return null;
    }

当它转到getSingleResult() 时,它会抛出:

PersistenceException:SQLGrammarException: Could not extract resultset

我检查了我的 SQL 查询,它似乎很好,所以我不确定出了什么问题。

编辑

调用函数:

String v=fileFacade1.get_value(fileID,date);

  if(v !=null ){ 

// if the URL column contains the result, do something.


}

【问题讨论】:

    标签: java mysql sql hibernate jpql


    【解决方案1】:

    我认为,您缺少一个参数:

    "Select URL FROM urllink WHERE URL="+"'f0='"+nodeid+"'&ts='"+ts
                                        ^ here
    

    因为解析后查询是:

    Select URL FROM urllink WHERE URL='f0='nodeid'&ts='ts
    

    另外,& 不是 sql 中有效的逻辑运算符,你应该改用and

    编辑:如果您希望它是 where 子句中的一个字符串,那么您的意思可能是:

    "Select URL FROM urllink WHERE URL='f0="+nodeid+"&ts="+ts + "'"
    

    【讨论】:

    • 我认为有一个误解,& 不是逻辑运算符,因为在我的 URL 列中它是这种格式:f0=27451&ts=2019.03.20.18.00.21 所以我需要检查两个参数的值是否存在
    • 那么'可能太多了,也许你的意思是WHERE URL='f0=nodeid&ts=ts'
    • 我只是想传递参数nodeidts,就这样,出了什么问题?我知道这有点令人困惑,因为= 符号太多
    • 我认为它有效,但在我的调用者函数中,它不起作用,就像 String v=fileFacade1.get_value(fileID,date); 。你能检查我编辑的帖子看看我的意思吗?
    • 由于我能够从函数中获得单个结果,调用者函数v 仍然返回null。
    猜你喜欢
    • 2013-06-13
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多