2016-08-12 54 views
0
的Java SQL錯誤
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) 

我的代碼:與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子句,如from klant from klant。見下文指出

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

我「米白癡,哈哈 – user3117628

+0

@ user3227070,考慮接受的答案,如果它幫助。 – Rahul