昵称最多20个字符 2016-03-28 03:56 采纳率: 0%
浏览 1383

JDBC自定义事务处理出错

我使用InvocationHandler自定义了一个事务处理类,但是在测试时发现会报空指针异常,是什么原因?
使用的是jdk 1.8

 public class TransactionHandler implements InvocationHandler {

    private final Object target;

    public TransactionHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Connection conn = DbUtil.getConnection();
        try {
            conn.setAutoCommit(false);
            method.invoke(target, args);
            conn.commit();
        } catch(SQLException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            System.out.println(e.getMessage());
            conn.rollback();
            conn.setAutoCommit(true);
        }
        return null;
    }

}

测试的代码

 public static void main(String[] args) throws SQLException {
        User user = new User();
        user.setUserName("test6");
        user.setPassword("test6");
        UserService userService = new UserServiceImpl();
        InvocationHandler transactionHandler = new TransactionHandler(userService);
        UserService userServiceProxy = (UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(), userService.getClass().getInterfaces(), transactionHandler);
        System.out.println(userServiceProxy.save(user));
    }

会在最后输出的时候报空指针异常,但是数据可以正确的插入数据库,出错也可以回滚。

  • 写回答

1条回答 默认 最新

  • 毕小宝 博客专家认证 2016-03-28 13:22
    关注

    排查下那个对象是空指针呢,异常信息定位是哪一行?

    评论

报告相同问题?

悬赏问题

  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统
  • ¥15 快手联盟怎么快速的跑出建立模型