[英]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.