Spring JDBC JdbcTemplate插入操作未提交问题求助
Spring JDBC JdbcTemplate插入操作未提交问题求助
各位大佬好,最近碰到个卡了我好几天的问题,想请大家帮忙看看:我用Spring JDBC的JdbcTemplate往Firebird数据库插入数据,执行完后日志显示影响了行数,但数据库里死活查不到新数据,感觉像是操作根本没提交一样。
先跟大家说下我的项目背景:
- 项目是Spring Boot栈,原本用Spring JPA连接PostgreSQL,一切功能都正常
- 现在需要新增对接另一个Firebird数据库,所以用Spring JDBC来操作这个库的表
为了排查问题,我专门在Firebird里建了个极简的测试表:
CREATE TABLE table_master ( id INTEGER NOT NULL, name VARCHAR(200), CONSTRAINT t_master_pk PRIMARY KEY (id) );
然后按照Spring官方文档的示例写了个测试类,核心代码大概是这样的:
@SpringBootTest @TestMethodOrder(MethodOrderer.OrderAnnotation.class) @Slf4j class JdbcTest { private DataSource fbDataSource; @Autowired private PlatformTransactionManager transactionManager; @BeforeEach public void setUp() { HikariConfig config = new HikariConfig(); // 这里配置了Firebird的驱动类、数据库URL、用户名和密码 config.setDriverClassName("org.firebirdsql.jdbc.FBDriver"); config.setJdbcUrl("jdbc:firebirdsql://xxx.xxx.xxx.xxx:3050/xxxx.fdb"); config.setUsername("sysdba"); config.setPassword("xxxx"); fbDataSource = new HikariDataSource(config); } @Test @Order(1) void testInsert() { JdbcTemplate jdbcTemplate = new JdbcTemplate(fbDataSource); String sql = "INSERT INTO table_master (id, name) VALUES (?, ?)"; int affectedRows = jdbcTemplate.update(sql, 1, "测试数据"); log.info("插入操作影响行数:{}", affectedRows); // 日志里明明显示影响了1行,但Firebird库里就是查不到这条数据 } }
我自己也琢磨了几个可能的原因,但还没排查出结果:
- 会不会是Firebird数据源的autoCommit属性被默认关闭了?但我没手动设置过这个参数啊,Spring JDBC不是默认应该自动提交吗?
- 项目里同时存在PostgreSQL和Firebird两个数据源,我@Autowired进来的transactionManager会不会是对应PostgreSQL的那个,根本没管Firebird这边的事务?
- 有没有可能是Firebird的JDBC驱动版本和HikariCP不兼容?或者驱动本身有什么特殊的事务处理要求?
有没有老哥遇到过类似的问题?或者能给我点调试排查的方向?实在是卡得没辙了,谢谢大家!
备注:内容来源于stack exchange,提问作者BUKTOP
相关产品推荐
相关产品推荐

