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));
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
初学JDBC(八)-JDBC的事务处理
上一篇博客讲了CallableStatement接口调用存储过程,这一篇博客我来说说JDBC的事务处理,这在以后的项目开发中也很重要,只有充分地考虑好JDBC的事务处理,才能在项目开发中遇到前台与后台异常时,JDBC的事务处理可以很好地去弥补这一措施,在银行,支付宝,金融,微信红包等等中尤其显得重要,不然的话如果我们给别人转钱时发生异常,钱从我们的卡里扣出来了,但是对方却没有收到,岂不是尴尬了,怎
JDBC中的事务处理
<br /> <br />在JDBC的数据库操作中,一项事务是由一条或是多条表达式所组成的一个不可分割的工作单元。我们通过提交commit()或是回退rollback()来结束事务的操作。关于事务操作的方法都位于接口java.sql.Connection中。<br />首先我们要注意,在JDBC中,事务操作默认是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作。操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回退。<br />其次,在JDBC中,可以通过调用se
jdbc处理事务
public class BankDao extends BaseDao { public static void main(String[] args) throws SQLException { BankDao bd = new BankDao(); bd.zz(); } private void zz() throws SQLException { // TODO Aut
说说事务的概念,在JDBC编程中处理事务的步骤。
1,事务是作为单个逻辑工作单元执行的一系列操作。 2,一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务 事务处理步骤: 3,conn.setAutoComit(false);设置提交方式为手工提交 4,conn.commit()提交事务 5,出现异常,回滚 conn.rollback();
JAVA事务处理 之 JDBC事务
最近要实现百万级大数据  批量导入, 在导入的过程中肯定会出现各种个样的问题,长度超长 , 数据为空 , 类型异常 。。等等                所以我们在这里必须要用到java事务了 , 本次所使用的是JDBC连接数据库 所以就用到了JDBC事务!
JDBC进阶之事务处理基本原理及示例
事务处理是在针对数据库操作时一个重要环节,它可以保证执行多条记录的一致性,实现数据库中表与表之间的关联,同时提高了对数据操作的准确性、安全性。本文主要一起来学习在Java程序中如何使用JDBC来实现数据间的事务处理。 一、什么是事务处理          事务处理就是当执行多个SQL指令时,如果因为某个原因使其中一条指令执行有错误,则取消先前执行过的所有指令。它的作用是保证
事务是什么?事务的四大特性? jdbc如何做事务处理?
事务:  对数据操作的一个单个逻辑单元,这个单元有可能有多个操作,要不同时成功,要不同时失败.        四大特性: 原子性, 隔离性, 一致性, 持久性.     原生jdbc对事务的处理如下: try{     connection.setAutoCommit( false);       数据库操作...     connection.commit(); }catch(Ex
jdbc批处理与事务处理
批处理,英文叫 Batch,顾名思义就是成批地处理某些事务。对于频繁访问数据库的程序而言,选择批处理是最合适不过的了。本文将介绍如何利用 JDBC 实现批处理。 一、什么是批处理           屁处理是指一次性执行多条SQL语句,并且在执行过程中,如果某条语句出现错误,则仅停止该错误语句的执行,而批处理中其他所有语句则继续执行。这是有别与事务处理 (事务处理的详情参见
jdbc事务回滚 批量操作数据 一个例子
一个例子
Java(JDBC)事务处理
Java(JDBC)事务处理