2015-01-28 1 views
1

Я пытаюсь создать экран, на котором будет отображаться история покупок у конкретного клиента. В моей таблице «Sales» содержатся столбцы «TicketNumber», «CustomerID», «InventoryNo», «Description», «Cost», «Retail», «IndividualSubTotal», «IndividualTax», «IndividualTotal», «SaleSubTotal», «SaleTax», , и "SaleTotal".Можно ли использовать SELECT * FROM table_name WHERE column_name = 'value', где 'value' может отображаться более чем в одной строке?

Для этого экрана мне понадобятся (пока) «TicketNumber», «CustomerID», «InventoryNo», «Retail», «IndividualTax» и «IndividualTotal».

Прямо сейчас, я пытаюсь вытащить информацию по идентификатору клиента. Моя конечная цель - разместить номер билета в таблице, но я хочу, чтобы он появился только один раз. Я думаю, что смогу это понять. Но сейчас это проблема, которую я испытываю.

try { 
     Class.forName("org.h2.Driver"); 
     Connection connection = DriverManager.getConnection("jdbc:h2:./RetailApplicationDatabase;AUTO_SERVER=TRUE"); 

     String sql; 
     Statement stmt; 

     sql = "SELECT distinct TicketNumber FROM Sales WHERE CustomerID = '" + CustomerNoNumberLabel.getText() + "';"; 
     stmt = connection.createStatement(); 

     ResultSet results = stmt.executeQuery(sql); 

     DefaultTableModel model = (DefaultTableModel) TicketNumberTable.getModel(); 
     String TicketNumber; 

     while(results.next()) { 
      TicketNumber = results.getString("TicketNumber"); 

      model.insertRow(TicketNumberTable.getRowCount(), new Object[] {TicketNumber}); 
     } 
    } catch (SQLException | ClassNotFoundException ex) { 
     Logger.getLogger(ViewHistoryDialog.class.getName()).log(Level.SEVERE, null, ex); 
    } 

Как вы можете видеть, в то время как есть больше результатов, я хочу продолжить вставку строки в таблицу. CustomerID будет отображаться в количестве разных номеров предметов и билетов, которые есть у клиента.

Когда я скомпилирую программу, я не получаю ошибок в выходном журнале, но я не вижу ничего, что помещается в таблицу. Я думал, что это может быть порядок, в котором я пытался что-то сделать, поэтому на данный момент у меня есть кнопка в этом диалоговом окне, в которой говорится «Загрузка», и когда это нажата, выполняется код выше.

Где моя проблема? Почему я не вижу ничего добавленного в таблицу?

Благодарим вас за любые полезные ответы.

EDIT (01/28/2015 - 8:03 AM MST): продажа уже добавлена ​​в таблицу «Продажи» в базе данных. Предположим, что клиент купил инвентарные номера 1, 2 и 3, и они являются первым клиентом, совершившим покупку, поэтому номер билета: 1. Три таблицы добавляются в таблицу «Продажи», для каждого инвентарного номера и Столбец TicketNumber будет иметь значение «1» во всех трех строках. Затем я пытаюсь извлечь эту информацию и отобразить ее в jTable. Я хочу отобразить номера билетов в jTable TicketNumberTable. Но мой ResultSet не получает номера билетов.

EDIT (01/28/2015 - 8:11 AM MST): Я изменил код, чтобы получить различные значения для TicketNumber. Однако это не моя основная проблема, так как я все еще работаю над тем, чтобы получить ResultSet для получения информации.

ответ

1

Ваш вопрос немного расплывчато по введению номера билета только один раз. Означает ли это значение для данного клиента? Или для всех клиентов? Если последнее, вы должны ввести в действие это как уникальное ограничение на TicketNumberTable.

Во-вторых, вы можете сделать select и insert в одном заявлении. Нет необходимости запускать несколько запросов и выполнять цикл. Что-то вроде:

INSERT INTO TicketNumberTable(TicketNumber) 
    SELECT distinct TicketNumber 
    FROM Sales 
    WHERE CustomerID = '. . .'; 

Или, может быть:

INSERT INTO TicketNumberTable(TicketNumber) 
    SELECT distinct TicketNumber 
    FROM Sales 
    WHERE TicketNumber NOT IN (SELECT TicketNumber FROM TicketNumberTable) AND 
      CustomerID = '. . .'; 
+0

Прошу прощения, я не был уверен в этом. Продажа уже добавлена ​​в таблицу «Продажи» в базе данных. Предположим, что клиент купил инвентарные номера 1, 2 и 3, и они являются первым клиентом, совершившим покупку, поэтому номер билета: 1. Три таблицы добавляются в таблицу «Продажи», для каждого инвентарного номера и Столбец TicketNumber будет иметь значение «1» во всех трех строках. Затем я пытаюсь получить эту информацию и отобразить ее в jTable. Я хочу отобразить номера билетов в jTable TicketNumberTable. Но мой ResultSet не получает номера билетов. –

+0

@ RyanShukis. , , Запрос 'select different' должен решить половину вашей проблемы о том, чтобы не получать дубликаты. Я не уверен в части jtable. –

+0

Хорошо, я изменил этот код. Но я все еще ничего не вижу в своем jTable. На данный момент это моя основная проблема. Спасибо за вашу помощь. –

1

Ничего себе, я решил этот вопрос ... И ни один не был бы в состоянии видеть это ... Я сделал SQL-запрос непосредственно в пределах H2. Когда таблица отображается, я заметил, что в моем столбце CustomerNo содержится пробел перед номером. Это связано с тем, что я использовал подстроку для извлечения номера клиента, а подстрока была отключена одним символом, что было пространством. Я бы никогда не заметил этого, если бы я не углубился и начал анализировать.

Спасибо всем, кто помог мне. Береги себя.

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