2016-06-14 15 views
-1

Ich habe eine Frage: Ich versuche, eine Insert-Abfrage mit in Java mit der JDBC für MySQL machen. Ich denke, dass mein Code korrekt ist, aber irgendwie kann ich die Methode, die ich in meiner Hauptklasse anrufe, nicht ausführen. Hier ist meine Methode, die ich will Aufrufcode:Warum führt meine Hauptklasse nicht die Methode aus, die ich aufgerufen habe?

public void wijzigAfspraak() { 
    try { 
     Statement stmt2 = conn.createStatement(); 
     String query2 = ""; 
     rs = stmt2.executeQuery(query2); 
     System.out.println("query uitgevoerd"); 

     while (rs.next()){ 
      String titel = rs.getString(1); 
      String datum = rs.getString(2); 
      int urgentie = rs.getInt(3); 
      String beschrijving = rs.getString(4); 
      System.out.println(titel+datum+urgentie+beschrijving); 
    } 
    } 
    catch (SQLException e){ 
     e.printStackTrace(); 
    } 

} 

hier ist meine Hauptklasse:

public class Main { 
public static void main(String[] args){ 

AfspraakDaoImpl adi = new AfspraakDaoImpl(); 
Afspraak afs = new Afspraak("","",1,""); 
afs.setTitel("hond"); 
afs.setAfspraakDatum("12juni"); 
afs.setUrgentie(123); 
afs.setBeschrijving("test"); 
adi.voegAfspraakToe(); 

adi.wijzigAfspraak(); 

}

meine Konsole druckt nicht alles und meine Datenbank zeigt keinen Unterschied in Daten, die bedeutet, es hat nicht richtig funktioniert?

Vielen Dank im Voraus!

+0

Sind Sie sicher, dass Sie die richtige 'main()' Methode starten? Wie starten Sie die Anwendung? Von einer IDE, von der Befehlszeile? –

Antwort

3

Sieht aus wie Sie leere SQL-Abfrage sind die Ausführung hier:

String query2 = ""; 
rs = stmt2.executeQuery(query2); 

Wenn Sie INSERT-Anweisung ausführen möchten, sollten Sie executeUpdate() Methode auf Sie Anweisung Objekt stmt2 aufrufen und SQL-Zeichenfolge als Parameter übergeben.

Außerdem betrachten PreparedStatement statt Statement wie folgt verwendet wird: mehr Sache

String sql = "INSERT INTO foo(value) VALUES(?)"; 
try (PreparedStatement ps = connection.prepareStatement(sql)) { 
    ps.setString(1, "bar"); 
    ps.executeUpdate(); 
} catch (SQLException e) { 
    // handle error 
} 

One. Sieht so aus, als ob Sie ResultSet rs als Klassenfeld behalten. Tun Sie dies nicht, versuchen Sie, die Anzahl veränderbarer Statusvariablen Ihrer Klasse zu minimieren, und versuchen Sie, Ihre Komponenten hell und zustandslos zu halten. Es ist besser, Statement und ResultSet in try-with-resources Block zu halten.

0

Da Sie ein DAO und mit MYSQL-Datenbank verwenden (Hexe ist hier nicht angegeben;)):

public void wijzigAfspraak(String 1, String 2, String 3, etc..) { 
try { 
    Statement stmt2 = conn.createStatement(); 
    String query2 = "insert into afspraken (column_1, column_2, etc...) values (String 1, String 2, etc..)"; --> these values come from the wijzigafspraak(String 1, String 2, etc..) 
    stm2.executeUpdate(query2); 
    System.out.println("query is inserted correctly"); 

Sie wollen nicht die rs.next() verwenden, für eine Hexe wird verwendet "SELECT-STATEMENT", Sie erhalten keine Daten, Sie fügen sie nicht ein.

dann Ihre Hauptklasse:

public class Main { 
public static void main(String[] args){ 

AfspraakDaoImpl adi = new AfspraakDaoImpl(); 
Afspraak afs = new Afspraak("","",1,""); 
afs.setTitel("hond"); 
afs.setAfspraakDatum("12juni"); 
afs.setUrgentie(123); 
afs.setBeschrijving("test"); 
//adi.voegAfspraakToe();//this is not specified?? and probably does not work either 

adi.wijzigAfspraak(afs.getTitel(), afs.getAfspraakDatum(), etc..); 
0

wo ist Ihre SQL-Anweisung? Es sollte sein:

String query2 = "select titel,datum,urgentie,beschrijving from Afspraak";