2016-08-12 2 views
0
Testcase: testKlantVerwijderen(Main.ApplicationTest): Caused an ERROR 
SQL-exception in zoekKlant - statementcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from klant where naam = '2' and voornaam = 'test' and geboortedatum = '1998-08-1' at line 1 
exception.DBException: SQL-exception in zoekKlant - statementcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from klant where naam = '2' and voornaam = 'test' and geboortedatum = '1998-08-1' at line 1 
    at database.KlantDB.zoekKlant(KlantDB.java:116) 
    at Main.Application.klantVerwijderen(Application.java:79) 
    at Main.ApplicationTest.testKlantVerwijderen(ApplicationTest.java:101) 

Mein Code:Java SQL-Fehler mit PreparedStatement-

public Klant zoekKlant(Klant k) throws DBException { 
    Klant returnKlant = null; 
    // connectie tot stand brengen (en automatisch sluiten) 
    try (Connection conn = ConnectionManager.getConnection();) { 
    // preparedStatement opstellen (en automtisch sluiten) 
    try (PreparedStatement stmt = conn.prepareStatement(
     "select * from klant from klant where naam = ? and voornaam = ? and geboortedatum = ? ");) { 

     stmt.setString(1, k.getNaam()); 
     stmt.setString(2, k.getVoornaam()); 
     stmt.setDate(3, Date.valueOf(k.getGeboorteDatum())); 
     stmt.execute(); 
     // result opvragen (en automatisch sluiten) 
     try (ResultSet r = stmt.getResultSet()) { 
      if (r.next()) { 
       Klant klant = new Klant(); 
       klant.setId(r.getInt("id")); 
       klant.setNaam(r.getString("naam")); 
       klant.setVoornaam(r.getString("voornaam")); 
       klant.setGeboorteDatum(r.getDate("geboortedatum").toLocalDate()); 
       klant.setOpmerking(r.getString("opmerking")); 
       klant.setDebetstandLimiet(r.getBigDecimal("debetstand_limiet")); 
       if (r.getByte("actief") == 0) 
       { 
        klant.setActief(false); 
       } 
       else{ 
        klant.setActief(true); 
       } 
       returnKlant = klant; 
      } 
      return returnKlant; 

     } catch (SQLException sqlEx) { 
      throw new DBException("SQL-exception in zoekKlant - resultset"+ sqlEx); 
     } 
    } catch (SQLException sqlEx) { 
     throw new DBException("SQL-exception in zoekKlant - statement"+ sqlEx); 
    } 
    } catch (SQLException sqlEx) { 
    throw new DBException(
     "SQL-exception in zoekKlant - connection"); 
    } 

} 

Meine Datenbank:

1 id int(11)   Nee Geen AUTO_INCREMENT Veranderen Veranderen Verwijderen Verwijderen 
Primaire sleutel Primaire sleutel 
Unieke waarde Unieke waarde 
Index Index 
Ruimtelijk Ruimtelijk 
Meer 
    2 naam varchar(64) latin1_swedish_ci  Nee Geen  Veranderen Veranderen Verwijderen Verwijderen 
Primaire sleutel Primaire sleutel 
Unieke waarde Unieke waarde 
Index Index 
Ruimtelijk Ruimtelijk 
Meer 
    3 voornaam varchar(32) latin1_swedish_ci  Nee Geen  Veranderen Veranderen Verwijderen Verwijderen 
Primaire sleutel Primaire sleutel 
Unieke waarde Unieke waarde 
Index Index 
Ruimtelijk Ruimtelijk 
Meer 
    4 geboortedatum date   Nee Geen  Veranderen Veranderen Verwijderen Verwijderen 
Primaire sleutel Primaire sleutel 
Unieke waarde Unieke waarde 
Index Index 
Ruimtelijk Ruimtelijk 
Meer 
    5 opmerking text latin1_swedish_ci  Ja NULL  Veranderen Veranderen Verwijderen Verwijderen 
Primaire sleutel Primaire sleutel 
Unieke waarde Unieke waarde 
Index Index 
Ruimtelijk Ruimtelijk 
Meer 
    6 debetstand_limiet double   Nee Geen  Veranderen Veranderen Verwijderen Verwijderen 
Primaire sleutel Primaire sleutel 
Unieke waarde Unieke waarde 
Index Index 
Ruimtelijk Ruimtelijk 
Meer 
    7 actief tinyint(1)   Nee Geen 

Also im Grunde irgendwie ist es etwas falsch mit meiner PreparedStatement-. Ich verstehe nicht ganz, was aber? Es sollte richtig funktionieren, aber es ist nicht, was ziemlich seltsam ist. Ich möchte einfach alle Felder auswählen, die meiner Bedingung entsprechen, und ich bin mir ziemlich sicher, dass die Abfrage so aussehen sollte, aber aus irgendeinem Grund ist es nicht. Kann mir jemand sagen, was ich falsch mache? Würde sehr geschätzt werden :)

Antwort

0

Das ist, weil Sie die FROM Klausel zweimal in Ihrer SELECT Anfrage wie from klant from klant wiederholt haben. Siehe unten zeigte

try (PreparedStatement stmt = conn.prepareStatement(
    "select * from klant from klant where naam = ? and voornaam = ? 
         ^.... HERE 
+0

I "m ein Idiot, lol – user3117628

+0

@ user3227070, betrachten die Annahme der Antwort, ob es geholfen. – Rahul

Verwandte Themen