java - 如何将 native 查询打印到控制台?

标签 java spring hibernate

我正在创建数据库管理的网络应用程序。其中一项功能是“解释器 SQL”。
这是我用于执行查询的代码:

示例 1

1  public String executeSQL(String[] split){
2      SessionFactory hibernateFactory = someService.getHibernateFactory();
3      Session session = hibernateFactory.openSession();
4      String message = null;
5      for (int i = 0; i < split.length; i++) {
6          try{
7              String query = split[i];
8              session.doWork(connection -> connection.prepareStatement(query).execute());
9      
10             message = "Success!";
11         }
12         catch(Exception e){
13             message = ((SQLGrammarException) e).getSQLException().getMessage();
14         }
15      
16      }
17      session.close();
18      return message;
19  }

有人可以告诉我如何调用“getResultList()”(第 8 行)吗?
我知道如何在该示例中执行此操作(使用 createNativeQuery):

示例 2

1  public String executeSQL(String[] split){
2      SessionFactory hibernateFactory = someService.getHibernateFactory();
3      Session session = hibernateFactory.openSession();
4      String message = null;
5      for (int i = 0; i < split.length; i++) {
6          try{
7              String query = split[i];
8              EntityManager entityManager = hibernateFactory.createEntityManager();
9              List<Object[]> resultList = entityManager.createNativeQuery(query).getResultList();
10             resultList.stream().map(Arrays::toString).forEach(System.out::println);
11             message = "Success!";
12          }
13         catch(Exception e){
14              // i can't catch SQLException here :( i mean i don't know how...
15         }
16  
17      }
18      session.close();
19      return message;
20  } 

但是正如你所看到的(第14行)我不知道如何在这里捕获SQLException,因为我得到的不是SQLException,而是: enter image description here 我无法访问该字段来获取消息(它是私有(private)的): enter image description here 我需要该消息将其打印到我的 html 中。所以我正在尝试另一种方法来执行查询prepareStatement()。
有人知道如何将该查询打印到控制台(示例 1)吗?

最佳答案

要将 SQL 查询打印到控制台中,请将以下内容添加到您的 application.properties 文件中:

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

希望对你有帮助!

关于java - 如何将 native 查询打印到控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59805773/

相关文章:

spring - 使用 RabbitMQ 插件在 Grails 中创建队列运行时

hibernate - Service-Dao 模式、DTO 和关系数据库

java - Spring-Boot 可执行文件-Jar NoSuchBeanDefinitionException

java - 使用 eclipselink 和 @namedquery 进行转换时出错

java - Spring:是否有内置方法在服务层中引发 jsr303 验证异常?

hibernate - 从 Hibernate 3/Grails 2.2.4 迁移到 Hiberate 5/Grails 3.2.4 时出现 MappingException

Java - sql查询的正则表达式

java - Android SQLITE,无法仅在 Marshmallow 中打开数据库

java泛型转换问题

spring - Ehcache并发修改异常+Spring+Struts应用