2016-04-14 7 views
1

Ich möchte mit einer Unterabfrage aus einer anderen Tabelle einfügen Anweisung verwenden. In meinem Fall möchte ich eine Zeile von PRESENTATION Tabelle zu AVAILABILITY Tabelle hinzufügen.Insert-Anweisung mit Unterabfrage und zusätzliche Spalte

AVAILABILITY Tabellenstruktur:

availableID  (number, generated using sequence) 
availableDay  (varchar) 
availableStart  (varchar) 
availableEnd  (varchar) 
lecturerID(FK)  (varchar) 
presentationID(FK) (number, generated using sequence) 

PRESENTATION Tabellenstruktur:

presentationID   (number, generated using sequence) 
presentationDay  (varchar) 
presentationStart  (varchar) 
presentationEnd  (varchar) 

Ich habe versucht, die Abfrage in DAO wie folgt zu konstruieren:

 String lecturerID = Abean.getLecturerID(); 
     String availableDay = Abean.getAvailableDay(); 
     String availableStart = Abean.getAvailableStart(); 
     String availableEnd = Abean.getAvailableEnd(); 
     Date availableDate = Abean.getAvailableDate(); 
     String presentationID = Abean.getPresentationID(); 

    try{ 

      currentCon = JavaConnectionDB.getConnection(); 

      PreparedStatement ps=currentCon.prepareStatement(" 
      insert into availability (availableID, 
             lecturerID, 
             availableDay, 
             availableStart, 
             availableEnd, 
             presentationid) 
      select(availabilityseq.nextval, 
        ?, 
        presentationDay, 
        presentationStart, 
        presentationEnd, 
        presentationid) 
        from presentation where presentationid=? 

      "); 
      ps.setString(1,Abean.getLecturerID()); 
      ps.setString(2,Abean.getAvailableDay()); 
      ps.setString(3,Abean.getAvailableStart()); 
      ps.setString(4,Abean.getAvailableEnd()); 
      ps.setString(5,Abean.getPresentationID()); 
      // ps.setString(6,Abean.getAvailableID()); 
      ps.executeUpdate(); 

      } 
    catch(Exception e){ 
     System.out.println("add availability 2 failed: An Exception has occurred! " + e); 
    } 

Wie erwartet, es Fehler zurück

Fehler: java.sql.SQLException: Invalid column index

Also, wie kann ich einfügen mit Unterabfrage mit extra Spalte?

UPDATE: MY DAO-Codes

+0

Haben Sie die Bindevariable zweimal angegeben? –

+0

Beachten Sie, dass in der Unterabfrage die where-Klausel 'presentation id =?' Sollte 'presentationid =?' –

+0

Meine schlechte .. Aber nachdem ich es ändern, treten die gleichen Fehler auf. Vielleicht sollte ich den Rest meiner DAO zeigen? – Elly

Antwort

0

Sie müssen sich mit der Bindungsvariablen Spezifikation in der SQL-Text der Einstellung von Bind-Variablen Werte übereinstimmen:

EDIT 18. April: entfernt Klammer aus ausgewählten Unterabfrage

PreparedStatement ps=currentCon.prepareStatement(" 
      insert into availability (availableID, 
             lecturerID, 
             availableDay, 
             availableStart, 
             availableEnd, 
             presentationid) 
      select availabilityseq.nextval, 
        ?, 
        presentationDay, 
        presentationStart, 
        presentationEnd, 
        presentationid 
        from presentation where presentationid=? 
      "); 
      ps.setString(1,Abean.getLecturerID()); // match first "?" 
      ps.setString(2,Abean.getPresentationID()); // match 2nd "?" 
+0

entspricht Ich bekomme' NullPointerException', aber er ruft die richtige 'presentationID' und' lectorID' ab. Ich überprüfte mit SOP 'availabilityDay',' availabilityStart' und 'availabilityEnd' waren null – Elly

+0

wo werden Sie es bekommen? –

+0

was tun, um die presentationDay/Start/Ende enthalten, die für die angegebene 'Abean.getPresentationID()' –