2016-10-20 2 views
0

내 라이브러리 관리 시스템 프로젝트에서 검색 북 프레임을 구현 중입니다. 이 프레임에서 책의 가용성을 확인하고 싶습니다.JTable이 값을 채우는 동안 중복 값을 표시합니다.

1 책 : 나는이 프레임을 실행하고 때 발행 된 책

의 기록을 유지 - 어떤의 JTable 라이브러리 2 Issuebook에있는 모든 책의 기록을 유지 - 어떤 나는 두 개의 데이터베이스 테이블이 동일한 값으로 세 번 채워집니다. 출력은 코드 뒤에 첨부됩니다. 문제를 찾을 수 없습니다. 여기 내 코드 :

public void actionPerformed(ActionEvent e) { 
     String bookname=tfBookName.getText(); 
     int count=0; 
     try{ 
      con=DemoConnection.getConnection(); 
      ps=con.prepareStatement("select book.bookid from book,issuebook where book.bookid!=issuebook.bookid and bookname=?"); 
      ps.setString(1, bookname); 
      rs=ps.executeQuery(); 
      while(rs.next()) 
      { 
       count++; 
       String bookid =rs.getString(1); 
       String availability="Available"; 

       Object[] row = { bookid, bookname, availability}; 

       DefaultTableModel model = (DefaultTableModel)table.getModel(); 

       model.insertRow(0,row); 

      } 
      ps1=con.prepareStatement("select book.bookid from book,issuebook where book.bookid=issuebook.bookid and bookname=?"); 
      ps1.setString(1, bookname); 
      rs1=ps1.executeQuery(); 
      while(rs1.next()) 
      { 
       String bookid =rs1.getString(1); 
       String availability="Issued"; 

       Object[] row = { bookid, bookname, availability}; 

       DefaultTableModel model = (DefaultTableModel)table.getModel(); 

       model.insertRow(0,row); 

      } 
      if(rs==null&&rs1==null) 
      { 
       JOptionPane.showMessageDialog(frame, "Book named"+bookname+"does not exist!!"); 
      } 
      else if(rs==null&&rs!=null) 
      { 
       JOptionPane.showMessageDialog(frame, "All the copies of"+bookname+" book are issued!!");  
      } 
      else if(rs!=null&&rs==null) 
      { 
       JOptionPane.showMessageDialog(frame, "All the copies of"+bookname+" book are avaialble!!"); 
      } 
      else if(rs!=null&&rs!=null) 
      { 
       JOptionPane.showMessageDialog(frame, count+" copies of"+bookname+" book is avaliable!!"); 
      } 
     } 
     catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 
}); 

출력 내용은 다음과 같습니다. 발행 된 책은 표에 표시됩니다. 중복 된 항목은 채워지지 않았지만 사용 가능한 책의 중복 항목이 표에 채워집니다. @Blip이 눈에 띄었다으로

image

Book table

Issuebook table

+1

이는 – Blip

+1

당신이 내 데이터베이스 테이블의 이미지를 첨부 일부 샘플 데이터 – Blip

+0

여기에 사용되는 테이블의 구조를 업로드 할 수있는 데이터베이스 쿼리 SQL에 문제처럼 보인다 in post edit @Blip – SanjotKaur

답변

0

는, 문제는 당신이 얻을, 특히 첫 번째

select book.bookid from book,issuebook where book.bookid!=issuebook.bookid and bookname=? 

이 쿼리에서, 당신의 SQL 쿼리에있다 문제가 book.bookid와 다를 때마다 book.bookid. 따라서 이슈 테이블에 3 개의 레코드가 있으면이 테이블에 책이 없을 때 3 개의 결과를 얻습니다. 콘솔에서이 쿼리를 직접 시도하면이를 지적해야합니다.

이 솔루션은

select book.bookid, IF(issuebook.bookid IS NULL, 'Available', 'Issued') as availability from book,issuebook where LEFT JOIN availability ON (book.bookid, issuebook.bookid) and bookname=? 

나는 매우 MySQL을 사용하고 "LEFT JOIN"표기하고 있지 않다으로 쿼리를 수정할 수 있지만, 아이디어가 자동으로 weither 또는에 따라 가용성 상태를 얻을 수 있습니다 bookid가 issuebook 테이블에 있거나 없는지 확인하십시오. 그래서 어쩌면이 ... 내 샘플 쿼리의 일부 구문 결함 당신이 하나 개의 SQL 쿼리해야이 같은 어쨌든

(이 PS1 제거를 RES1 ...)와

String availability=rs.getString(2); 
과 가용성을 얻을

SQL JOIN에 익숙하지 않은 경우 주제에 대해 자신을 문서화하는 것이 좋습니다. 이 도움이 될 것입니다

희망)

관련 문제