2016-04-05 8 views
0

Bir otelde bulunan odalar için kontrol ettiğim program. Kullanıcıların tarihleri ​​girmek için JCalendar ve mevcut odaları görüntülemek için JTable'ı kullandım. Sorun şu ki, Kullanılabilirliği Kontrol Et düğmesine tıkladığımda, bir SQL İstisnası atıyor. İşteJTable ve JCalendar kullanarak oda kullanılabilirliğini kontrol etmek SQL istisnası atar

kod parçacıkları şunlardır:

İşte
public class Room_Availability extends JFrame { 

//Note: Didn't add codes about instantiating panels, setting layouts and all 

JLabel arr_date= new JLabel("Arrival Date:"); 
JLabel dep_date= new JLabel("Departure Date:"); 
JButton chk_btn= new JButton("Check Availability"); 
JDateChooser arrival = new JDateChooser(); 
JDateChooser departure = new JDateChooser(); 
JTable CheckAvail= new JTable(); 

Room_Availability(){ 

chk_btn.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      CheckAvailActionPerformed(evt); 
     } 
    }); 

    } 


private void CheckAvailActionPerformed(java.awt.event.ActionEvent evt) {            


    ResultSet rs = null; 
    Connection conn = null; 
    Statement stmt = null; 
    try { 
     // new com.mysql.jdbc.Driver(); 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     String connectionUrl = "jdbc:mysql://localhost:3306/testing?autoReconnect=true&useSSL=false"; 
     String connectionUser = "root"; 
     String connectionPassword = "admin"; 
     conn = DriverManager.getConnection(connectionUrl, connectionUser, 
       connectionPassword); 
     stmt = conn.createStatement(); 

     String query= "select * from room as ro" + 
       "where ro.room_id not in "+ 
       " ("+ 
        "select re.room_no"+ 
        " from testing.booking as re "+ 
        "where (arrival_date >= ? and departure_date < ?)"+ 
        "or (departure_date >= ? and arrival_date < ?)"+ 
       ")"; 

     PreparedStatement pStmt = (PreparedStatement) conn.prepareStatement(query); 

     java.util.Date utilDate = arrival.getDate(); 
     java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); 

     java.util.Date utilDate1 = departure.getDate(); 
     java.sql.Date sqlDate1 = new java.sql.Date(utilDate1.getTime()); 

     pStmt.setDate(1, sqlDate); 
     pStmt.setDate(2, sqlDate1); 
     pStmt.setDate(3, sqlDate); 
     pStmt.setDate(4, sqlDate1); 


     rs = pStmt.executeQuery(); 

     CheckAvail.setModel(DbUtils.resultSetToTableModel(rs)); 


    } catch (Exception e) { 
     e.printStackTrace(); 
    }  
    } 
} 

olduğunu GUI nasıl görüneceği gibi: MySQL üzerine (ı jCalendar üzerinde girerken aynı tarihlerde birlikte) Ben sorgu çalıştırdığınızda enter image description here

İşte enter image description here

alıyorum hataları şunlardır: Bu veritabanı görüntülenir ve JTable görüntülenen gereken budur

enter image description here

+3

4 questio var Sorgunuzdaki n işaretleri, yani 4 parametre gerektirir; Sadece 2 parametre belirtebilirsiniz. –

+0

“” veya (departure_date> =? Ve arrival_date Tia

cevap

2

Her '?' Için parametre ayarlamanız gerektiğini düşünüyorum. sorguda. Dört tane var '?'

"where (arrival_date >= ? and departure_date < ?)"+ 
"select * from room as ro" + 

Sadece sonunda bir boşluk ekleyin: tutucuları ama sadece iki tanesi

pStmt.setDate(1, sqlDate); 
    pStmt.setDate(2, sqlDate1); 

pStmt.setDate(1, sqlDate); 
pStmt.setDate(2, sqlDate1); 
pStmt.setDate(3, sqlDate1); 
pStmt.setDate(4, sqlDate); 
+0

'a ulaşıyorum. Teşekkürler, sadece denedim ama 'MySQLSyntaxErrorException' – Tia

+0

@Diksha attırabilir misiniz? Bu cevaba dayanarak düzeltme girişiminden sonra sahip olduğunuz kodla ilgili sorunuz mu var? –

+0

@LajosArpad Bitti! – Tia

1

gibi bir şey eksik uzay hatlarında yoktur olmalı set dize

"where (arrival_date >= ? and departure_date < ?) "+ 
"select * from room as ro " + 
+0

Yine de 'MySQLSyntaxErrorException' – Tia

+0

'u attım cevabımı düzenledim, boşluk olmayan başka bir çizgi var, hepsini daha iyi kontrol et –

+0

Çok teşekkürler! İşe yaradı! – Tia