2 u010375137 u010375137 于 2016.03.28 11:56 提问

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个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.28 21:22

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

u010375137
u010375137 System.out.println(userServiceProxy.save(user));
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!