2016-04-05 6 views
0

Das Programm, das ich geschrieben habe, überprüft die verfügbaren Zimmer in einem Hotel. Ich benutzte JCalendar für den Benutzer, um die Daten und JTable einzugeben, um die verfügbaren Räume anzuzeigen. Das Problem ist, dass, wenn ich auf die Schaltfläche Verfügbarkeit prüfen klicke, es eine SQL-Ausnahme auslöst.Überprüfen der Verfügbarkeit von Zimmern mit JTable und JCalendar löst SQL-Ausnahme aus

Hier sind die Code-Schnipsel:

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

Hier ist, wie die GUI wie folgt aussieht: enter image description here

Wenn ich ausführen die Abfrage (mit den gleichen Daten wie ich auf dem JCalendar eingeben) auf MySQL diese Datenbank ist, was angezeigt wird, sollte auf dem JTable angezeigt: enter image description here

Hier sind die Fehler ich erhalte:

enter image description here

+3

Es gibt 4 questio n markiert Ihre Anfrage, dh es benötigt 4 Parameter; Sie geben nur 2 Parameter an. –

+0

Ich habe die Zeile '' oder (departure_date> =? Und arrival_date Tia

Antwort

2

Ich denke, Sie sollten Parameter für jedes '?' in der Abfrage. Es gibt vier '?' Platzhalter, aber Sie setzen nur zwei von ihnen

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

Es sollte so etwas wie dieses

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

Danke, ich habe es gerade ausprobiert, aber es hat' MySQLSyntaxErrorException' – Tia

+0

@Diksha geworfen, kannst du bearbeiten Ihre Frage mit dem Code, den Sie nach dem Versuch haben, basierend auf dieser Antwort zu beheben? –

+0

@LajosArpad Fertig! – Tia

1

Es fehlt Platz in Linien:

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

Fügen Sie einfach ein Leerzeichen am Ende die Zeichenkette

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

Es war immer noch' MySQLSyntaxErrorException' – Tia

+0

Ich bearbeitete meine Antwort, es gibt eine andere Zeile ohne Leerzeichen, besser sie alle zu überprüfen –

+0

Vielen Dank! Es funktionierte! – Tia