2016-08-12 3 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) 

Мой код:ошибки Java SQL с 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"); 
    } 

} 

Моя база данных:

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 

Так в основном почему-то есть что-то не так с моей PreparedStatement. Я не совсем понимаю, что? Он должен работать правильно, но это не так, что довольно странно. Я просто хочу выбрать все поля, соответствующие моему условию, и я уверен, что это то, что должен выглядеть запрос, но по какой-то причине это не так. Может ли кто-нибудь сказать мне, что я делаю неправильно? Было бы очень выгодно :)

ответ

0

Это потому, что вы дважды повторили предложение FROM в своем запросе SELECT, например from klant from klant. Ниже указало

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

Я "м идиот, лол – user3117628

+0

@ user3227070, рассмотреть вопрос о принятии ответа, если это помогло. – Rahul

Смежные вопросы