我有一个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异常的代码行
基础教程推荐
- 解决springboot服务启动报错:Unable to start embedded contain 2023-04-17
- Spring-Security对HTTP相应头的安全支持方式 2023-06-24
- java – 在Jenkins中运行自定义数据库脚本 2023-10-31
- Mybatis-plus:${ew.sqlselect}用法说明 2023-01-24
- MyBatisPlus代码生成器的原理及实现详解 2023-03-30
- SpringBoot+SpringSecurity+JWT实现系统认证与授权示例 2023-04-05
- JSP过滤器Filter配置过滤类型全部汇总 2023-08-01
- CentOS 6.4出现Disk sda contains BIOS RAID metadata解决方法 jajavaja的专栏 2023-08-31
- jsp实现上一页下一页翻页功能(示例代码) 2023-08-01
- 深入了解Java方法的重载与重写 2023-03-15
