2015-04-22 2 views
1

У меня есть приложение Java, которое вставляет элементы запаса, поскольку они получены от поставщика. Я фиксирую изображение штрих-кода продукта вместе с другой информацией (имя, цена & и так далее). Я сохраняю изображение штрих-кода в байтах в базе данных PostgreSQL. Поскольку у меня еще нет сканера штрих-кода, я беру фотографию изображения штрих-кода и вставляю ее следующим образом.Фильтрация данных postgres с использованием столбца bytea

//code extract 
    File imgFile = new File(barcodeImage.jpg); 
    FileInputStream fin=new FileInputStream(imgFile); 
    pstmt2.setBinaryStream(19, fin, (int) imgFile.length()); //inserts  into barcodeImage - bytea column 

Теперь я хочу извлечь продукт из базы данных, используя изображение штрих-кода, которое я сохранил. что-то вроде:

  select * from stock_item where barcodeImage=*** 

Как я могу фильтровать данные с помощью столбца barcodeImage (bytea)? Также как работает сканер штрих-кода.

ответ

0

Единственный способ сканировать штрих-код изображения и сохранить код как varchar. IMHO

+0

Спасибо. Есть ли возможность использовать разные товарные позиции у разных поставщиков, чтобы иметь такой же код, поскольку это может вызвать конфликт? – Sam

+0

К сожалению, да, хотя и редко. Тот же код может быть повторно использован другим поставщиком для нового продукта, поскольку исходный продукт больше не производится. – Yasas

+0

Хорошо, тогда это управляемо. Я предположил, что вывод сканера штрих-кода - это изображение. Но исходя из вашей рекомендации, кажется, что вывод представляет собой строку символов. Не так? – Sam

0

Если вы хотите сделать это в базе данных, вам понадобится библиотека, которая может декодировать штрих-коды из растровых изображений (PNG, JPEG и т. Д.), И вам нужно будет разоблачить это как функцию PostgreSQL через процедурный язык (PL/Python, PL/Perl, C и т. д.).

Лично я рекомендую не делать это в БД. Передайте работу в пул внешних вспомогательных процессов, каждый из которых анализирует блок кодов и обновляет БД кодом (если есть), найденным на изображении. Это дает вам больше выбора языка, изолирует базу данных от любых сбоев в программном обеспечении декодирования штрих-кода и т. Д.

Мой первый поиск найден zxing, библиотека Java для декодирования штрих-кодов. Поэтому я, вероятно, использовал бы это с PgJDBC для создания простого рабочего процесса, который бы извлекал изображение штрих-кода, расшифровывал его и обновлял строку декодированным штрих-кодом. Если по какой-то причине мне действительно нужно было это сделать в БД, я бы использовал PL/Java (предупреждение, здесь были драконы) или найти библиотеку декодирования штрих-кода для лучшего поддерживаемого языка в базе данных.

Попытка сделать это, как вы описали в статье WHERE, будет совершенно безнадежной. Вам нужно будет декодировать штрих-код для каждого изображения в каждом запросе. Совершенно неуправляемо. Функциональный индекс работал бы, но было бы очень дорого для создания и кошмара для поддержки перед обновлениями для штрих-кода lib и т. Д. Вам нужно предварительно обработать это.

Смежные вопросы