我有一个Actor(Play Framework,Java),用于定期进行一些数据库数据导入.这个actor调用各种其他类进行导入,持久化等.我当前的问题是我无法弄清楚生成SQL异常的确切行号和文件.例如,我得到这样的错误:[info] applicati...
我有一个Actor(Play Framework,Java),用于定期进行一些数据库数据导入.这个actor调用各种其他类进行导入,持久化等.我当前的问题是我无法弄清楚生成SQL异常的确切行号和文件.例如,我得到这样的错误:
[info] application - javax.persistence.PersistenceException: ERROR executing DML bindLog[] error[ERROR: null value in column "email" violates not-null constraint\n Detail: Failing row contains (266, null, null, null).]
[info] application - Starting persisting of customer id 29917837
[error] o.j.StatementLogger - insert into emails (email, domain, user_id) values (null,null,null);
throws exception: org.postgresql.util.PSQLException: ERROR: null value in column "email" violates not-null constraint
Detail: Failing row contains (268, null, null, null).
org.postgresql.util.PSQLException: ERROR: null value in column "email" violates not-null constraint
Detail: Failing row contains (268, null, null, null).
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2182)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1911)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:173)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:645)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:495)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:441)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
at sun.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
当然,我可以查看错误消息,看看某处某处正试图保留我的电子邮件模型而不填充它.现在代码库非常小(约200-300行),我可以非常准确地猜测它来自哪里.但框架是否也应该报告行号?或者这可能是演员在使用时发生的事情,因为他们在某种程度上,某种程度上,在系统之外都是如此?
解决方法:
您正在使用一个框架,使用反射执行它的查询,这使得调试非常困难.我不知道你正在使用的具体框架,但很可能它的配置可以设置为使调试这类事情更容易.
如果没有,或者它是您自己的使用反射的代码,您可以捕获异常,将其包装,并从“外部”代码(即执行反射操作的代码)中重新抛出它.这将为您提供额外的堆栈跟踪,其中包含代码中的确切位置.
例如,您可以使用包装器代码执行此操作:
try {
this.custPersister.persist(customer);
} catch (Exception e) {
throw new Exception(e);
}
只需确保在外部代码中的适当位置捕获此异常,并记录堆栈跟踪.
本文标题为:java – 找出生成SQL异常的代码行
基础教程推荐
- 一文掌握JVM Safe Point 2023-06-06
- Netty序列化深入理解与使用 2023-03-22
- SpringBoot+Querydsl 框架实现复杂查询解析 2022-11-29
- Java动态规划之丑数问题实例讲解 2023-06-06
- 利用Java实现带GUI的气泡诗词特效 2022-09-03
- SpringCloud实现灰度发布的方法步骤 2022-11-16
- 如何用注解的方式实现Mybatis插入数据时返回自增的主键Id 2023-02-11
- springboot实现敏感字段加密存储解密显示功能 2022-11-01
- Redis实现商品秒杀功能页面流程 2023-05-19
- 自带IDEA插件的阿里开源诊断神器Arthas线上项目BUG调试 2023-01-18