2015-01-28 1 views
1

특정 고객의 구매 내역을 표시하는 화면을 만들려고합니다. 내 'Sales'테이블에 'TicketNumber', 'CustomerID', 'InventoryNo', 'Description', 'Cost', 'Retail', 'IndividualSaxTotal', 'IndividualTotal', 'SaleSubTotal', 'SaleTax' , 그리고 "SaleTotal".SELECT * FROM table_name WHERE column_name = 'value'를 사용할 수 있습니까? 'value'는 둘 이상의 행에 나타날 수 있습니까?

이 화면에서는 "TicketNumber", "CustomerID", "InventoryNo", "Retail", "IndividualTax"및 "IndividualTotal"만 필요합니다.

지금 당장 고객 ID로 정보를 가져 오려고합니다. 나의 궁극적 인 목표는 테이블에 티켓 번호를 두는 것이지만, 나는 단지 그 번호를 한 번만 나타나기를 원한다. 나는 이것을 이해할 수있을 것이라고 생각한다. 하지만 지금 당장은 이것이 내가 겪고있는 문제입니다.

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); 
    } 

더 많은 결과가 있지만 내가 계속 내 테이블에 행을 삽입하려고합니다. 고객 ID는 고객이 보유한 많은 품목 및 티켓 번호에 나타납니다.

프로그램을 컴파일 할 때 출력 로그에 오류가 표시되지 않지만 테이블에 아무것도 표시되지 않습니다. 나는 그것을하기 위해 노력하고있는 순서일지도 모른다고 생각했었다. 그래서 지금은이 대화 상자에 "Load"라고 쓰여있는 버튼이 있는데,이 버튼을 누르면 위의 코드가 실행된다.

내 문제는 어디에 있습니까? 왜 내가 테이블에 추가되는 것을 보지 못하겠습니까?

도움이 될만한 답변을 미리 보내 주셔서 감사합니다.

EDIT (01/28/2015 - 8:03 AM MST) : 판매가 이미 데이터베이스의 'Sales'테이블에 추가되었습니다. 고객이 재고 번호 1, 2 및 3을 구매했으며 첫 번째 구매 고객이므로 티켓 번호가 1이라고 가정 해 봅시다. '재고'테이블에 3 개의 행이 추가되고 각 재고 번호에는 TicketNumber 열은 세 행 모두에서 '1'값을 갖습니다. 그런 다음이 정보를 검색하여 jTable에 표시하려고합니다. jTable TicketNumberTable에 티켓 번호를 표시하고 싶습니다. 그러나 ResultSet은 티켓 번호를 검색하지 않습니다.

EDIT (01/28/2015 - 오전 8:11 MST) : TicketNumber의 고유 값을 가져 오도록 코드를 변경했습니다. 그러나 이것은 여전히 ​​내 ResultSet을 가져 와서 정보를 검색하기 위해 노력하고 있으므로 필자의 주요 관심사는 아닙니다.

답변

1

티켓 번호를 한 번만 입력하면 약간 애매합니다. 주어진 고객에게 이것이 의미합니까? 아니면 모든 고객에게? 후자의 경우이 값을 TicketNumberTable에 대한 고유 제한 조건으로 적용해야합니다.

두 번째로 selectinsert을 하나의 문장으로 처리 할 수 ​​있습니다. 여러 쿼리를 실행하고 루핑 할 필요가 없습니다. 뭔가 같이 : 아마도

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이라고 가정 해 봅시다. '재고'테이블에 3 개의 행이 추가되고 각 재고 번호에는 TicketNumber 열은 세 행 모두에서 '1'값을 갖습니다. 그런 다음이 정보를 검색하여 jTable에 표시하려고합니다. jTable TicketNumberTable에 티켓 번호를 표시하고 싶습니다. 그러나 ResultSet은 티켓 번호를 검색하지 않습니다. –

+0

@ RyanShukis. . . 'select distinct' 질의는 중복을 얻지 못하는 것에 대한 문제의 절반을 해결해야합니다. jtable 부분에 대해 잘 모르겠습니다. –

+0

좋아, 나는 그 코드를 바꿨다. 하지만 여전히 내 jTable에서 아무것도 볼 수 없습니다. 그게 내 우선적 인 문제 야. 그러나 도움을 주셔서 감사합니다. –

1

와우, 나는 ...이 문제를 결정 그리고 아무도 그것을 볼 수 없었을 것이다 ... 나는 내에서 직접 SQL 쿼리를했다 H2 콘솔. 테이블이 표시되면 CustomerNo 열에 숫자 앞에 ""(공백)이 있음을 발견했습니다. 이는 하위 문자열을 사용하여 고객 번호를 추출하고 부분 문자열이 한 문자 씩 떨어져 있기 때문입니다. 나는 그걸 알아 채지 못했을 것이고, 나는 그것에 깊이 빠지지 않고 분석을 시작 했었을 것이다.

나를 도와 주신 모든 분들께 감사드립니다. 조심해.

관련 문제