sqlite-jdbc icon indicating copy to clipboard operation
sqlite-jdbc copied to clipboard

The inserted data is lost

Open scf18857887860 opened this issue 1 year ago • 0 comments

Describe the bug In my framework, which uses MyBatis-Flex, data is inserted within the same transaction, and the insertion returns successfully. The data can also be queried within the transaction. However, after the request ends, the data is lost when queried in a subsequent request, even though other data within the same transaction remains intact.

To Reproduce Provide a sample code that reproduces the error.

TransactionManager.execTransaction(() -> {
            try {
                    List<MESPay> addPayList = processMarkingPayBO.getAddPayList();
                    log.info("营销SDK-addPayList,size={}", addPayList.size());
                    if (CollectionUtils.isNotEmpty(addPayList)) {
                        int count = 0;
                        for (MESPay mesPay : addPayList) {
                            count += mesPayDao.create(mesPay);
                        }
                        log.info("营销SDK-addPayList,count={}", count);
                        List<MESPay> mesPays = 
            `mesPayDao.queryByOrderKeyIgnoreLogicDelete(addPayList.get(0).getEdgeOrderKey());`
                        log.info("营销SDK-orderKey,mesPays={}", JSONObject.toJSONString(mesPays));
                    }
                    if (CollectionUtils.isNotEmpty(updatePayList)) {
                        updatePayList.forEach(mesPayDao::update);
                    }
            } catch (Exception e) {
                log.error("error happened.", e);
                throw new BusinessException(ErrorCode.FAILED_ADD_PAY_PAY_EXIST, "保存营销活动失败");
            }
            return 1;
        });
  public class TransactionManager {
      public static <TT> TT execTransaction(Supplier<TT> supplier) {
          boolean needLock = DatabaseHelper.databaseType() == DatabaseType.SQLITE;
  
          if (needLock) {
              synchronized (SynchronizedBaseDao.class) {
                  return Db.txWithResult(supplier);
              }
          } else {
              return Db.txWithResult(supplier);
          }
      }
  }

Expected behavior

The data was inserted successfully, and it can also be queried.​⬤

Logs image

Environment (please complete the following information):

  • OS: [Windows 7]
  • CPU architecture: [x86_64, intel]
  • sqlite-jdbc version [3.39.3.0]

Additional context

scf18857887860 avatar Sep 06 '24 08:09 scf18857887860