问题:java测试类向订单表插入数据,程序没有错误运行也正常,但是查看数据库时发现数据库未插入数据是怎么办?
第一步,先检查确认代码无错误:
public class OrderDaoTest { private OrderDao orderDao = new OrderDaoImpl(); // 保存订单 @Test public void saveOrder() { orderDao.saveOrder(new Order("1234123412344", new Date(), new BigDecimal(10000), 0, 1)); orderDao.saveOrder(new Order("1234123412345", new Date(), new BigDecimal(10000), 0, 1)); System.out.println("over"); } }
第二步,查看数据库连接配置文件地址是否正确:
username=root password=root url=jdbc:mysql://localhost:3306/book driverClassName=com.mysql.jdbc.Driver initialSize=5 maxActive=10
第三步,查看连接数据库的工具类,看是否设置了手动提交事务:
/** * 获取数据库连接池中的连接 * @return 如果返回null,说明获取连接失败<br/>有值就是获取连接成功 */ public static Connection getConnection(){ Connection conn = conns.get(); if (conn == null) { try { conn = dataSource.getConnection();//从数据库连接池中获取连接 conns.set(conn); // 保存到ThreadLocal对象中,供后面的jdbc操作使用 conn.setAutoCommit(false); // 设置为手动管理事务 } catch (SQLException e) { e.printStackTrace(); } } return conn; }
数据库连接设置为手动管理事务导致测试类数据插入数据库失败解决方案:
在测试类中手动提交事务就可以解决。
public class OrderDaoTest { private OrderDao orderDao = new OrderDaoImpl(); // 保存订单 @Test public void saveOrder() { try { orderDao.saveOrder(new Order("1234123412344", new Date(), new BigDecimal(10000), 0, 1)); orderDao.saveOrder(new Order("1234123412345", new Date(), new BigDecimal(10000), 0, 1)); Connection conn = JdbcUtils.getConnection(); conn.commit(); } catch (Exception e) { } } }
总结:此次错误主要是由于数据库连接工具类中设置了手动管理事务,在测试类里手动提交就可以了。