Удалить таблицу базы данных на основе имен файлов в Java

У меня есть приведенный ниже код для class IImporter, который до сих пор работает нормально. Каждый день я получаю много zip-файлов, которые содержат имена как 'EQUFULLFILE' и 'NONEQUFULLFILE' в каталоге, и я пытаюсь прочитать файлы из этого каталога и обработать их в таблице базы данных 'EquData' или 'NonEquData' соответственно. Перед обработкой я просто пытаюсь удалить все данные из этой таблицы базы данных.

Но я нашел проблему в моем коде. Иногда, когда я не получаю никаких файлов в каталоге 'EQUFULLFILE' or 'NONEQUFULLFILE', он просто удаляет данные из таблицы базы данных.

Мне просто нужно немного изменить свой код, чтобы адаптировать логику таким образом, чтобы, когда я не получал никаких файлов в каталоге как 'EQUFULLFILE', он не должен был удалять какие-либо данные из таблицы базы данных 'EquData'. Когда я не получаю никаких файлов в каталоге as'NONEQUFULLFILE', он не должен удалять данные из таблицы базы данных 'NonEquData'.

Любое предложение, пожалуйста?

@Service
public class IImporter {

    private final static Logger log = LoggerFactory.getLogger(IImporter.class);
    private final static String EQU_FILE_TAG = "EQUFULLFILE";
    private final static String NONEQU_FILE_TAG = "NONEQUFULLFILE";


    private boolean isEquity;

    @Autowired
    private IFullreader IFullreader;

    @Autowired
    private ZipWalker zipWalker;

    @Autowired
    private SessionFactory sessionFactory;

    @Transactional
    public void importDir(Path indir) throws IOException {
        log.info("Delete all table DATA");

    //here the logic should be changed and based on file name table should be deleted
        sessionFactory.getCurrentSession().createQuery("delete from EquData").executeUpdate();
        sessionFactory.getCurrentSession().createQuery("delete from NonEquData").executeUpdate();

        log.info("Process directory" + indir.toString());

        Files.walk(indir, 1, FOLLOW_LINKS)
            .filter(Files::isRegularFile)
            .filter(f -> f.toString().endsWith(".zip"))
            .sorted()
            .forEach(f -> zipWalker.processZipFile(f, this::importFile));
    }

    private void importFile(Path path) {
        this.isEquity = path.getFileName().toString().contains(EQU_FILE_TAG);
        if (isEquity) {
        //code for reading data from file EQUFULLFILE
        }       
        else {
        //code for reading data from file NONEQUFULLFILE
        }           
            
        }
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы дважды определили EQU_FILE_TAG. Подозреваю, что опечатка.

Как насчет этого?

@Service
public class IImporter {

    private final static Logger log = LoggerFactory.getLogger(IImporter.class);
    private final static String EQU_FILE_TAG = "EQUFULLFILE";
    private final static String NONEQU_FILE_TAG = "NONEQUFULLFILE";

    private boolean isEquity;
    private boolean equFileFirstTime = true;
    private boolean nonequFileFirstTime = true;  

    @Autowired
    private IFullreader IFullreader;

    @Autowired
    private ZipWalker zipWalker;

    @Autowired
    private SessionFactory sessionFactory;

    @Transactional
    public void importDir(Path indir) throws IOException {
        log.info("Process directory" + indir.toString());

        Files.walk(indir, 1, FOLLOW_LINKS)
            .filter(Files::isRegularFile)
            .filter(f -> f.toString().endsWith(".zip"))
            .sorted()
            .forEach(f -> zipWalker.processZipFile(f, this::importFile));
    }

    private void importFile(Path path) {
        this.isEquity = path.getFileName().toString().contains(EQU_FILE_TAG);
        if (isEquity) {
            if (equFileFirstTime) {
                log.info("Delete EQUFULLFILE table DATA");
                sessionFactory.getCurrentSession().createQuery("delete from EquData").executeUpdate();
                equFileFirstTime = false;
            }
            //code for reading data from file EQUFULLFILE
        }       
        else {
            if (nonequFileFirstTime) {
                log.info("Delete NONEQUFULLFILE table DATA");
                sessionFactory.getCurrentSession().createQuery("delete from NonEquData").executeUpdate();
                nonequFileFirstTime = false;
            }
            //code for reading data from file NONEQUFULLFILE
        }           
            
    }
     
}

да, извините, это был тип для EQU_FILE_TAG ... я проверю и дам вам знать, но похоже на правильную логику :) спасибо

Symonds 15.12.2020 14:11

Другие вопросы по теме