繁体   English   中英

带有PreparedStatement的Java SQL错误

[英]Java sql errors with preparedstatement

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)

我的代码:

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

所以基本上,我的准备陈述有些不对劲。 我不太明白吗? 它应该可以正常工作,但不能正常工作,这很奇怪。 我只想选择与我的条件匹配的所有字段,并且我很确定这就是查询的外观,但是由于某种原因,它不是。 谁能告诉我我在做什么错? 将不胜感激:)

这是因为您在SELECT查询中重复了两次FROM子句,就像from klant from klant 见下文指出

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM