昵称最多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#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题