Java : SQL 语法错误
Java : error in SQL syntax
我正在尝试通过以下查询从我的数据库中检索信息:
String Retrieve
= "SELECT o.order_id , o.betalingsKenmerk , o.betaalMethode , o.tijdstipBezorging , o.datum"
+ ", o.adres , o.huisnummer , o.postcode , o.woonplaats , o.landCode , o.extrainfo , o.opmerking"
+ ", o.altEmail , o.voornaam , o.achternaam , o.bedrijfsnaam , o.telnummer , o.betaald , o.bezorgkosten"
+ ", o.totaalExBzg , o.siteCode , o.opmerking"
+ ", IF(o.transactieID = -1, 1,0) "
+ "AS pickup, r.rest_id, TRIM(CONCAT(r.naam, ' ', r.filiaal)) AS restname"
+ "FROM thuis.order o IGNORE INDEX(connectieid, doorberekenen)"
+ "INNER JOIN connectie c IGNORE INDEX(methode)"
+ "ON o.connectieId = c.id"
+ "AND c.methode = 26 "
+ "INNER JOIN restaurant r"
+ "ON o.restaurantRest_id = r.rest_id"
+ "WHERE o.datum >= TIMESTAMP(CURDATE())"
+ "AND o.order_statusOrder_status_id = '1'"
+ "AND o.order_statusOrder_device_id = ?"
+ "AND o.doorberekenen = '1'"
+ "AND ((o.bevestigingsId IS NULL OR o.bevestigingsId = 0) AND o.bevestigdDoor IS NULL)";
但是我得到一个错误:
[17-03-2015 10:20:57] [FATAL] [OrderCollector]
Error : com.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 'thuis.order o IGNORE INDEX(connectieid, doorberekenen)INNER JOIN connectie c IGN' at line 1
我已经从 netbeans 中的 Sql 管理器尝试对数据库进行此查询,它工作得很好,但是当我尝试为 java 重新键入它时,它只是不断发出上面的错误。
我找不到解决方案!
您缺少 space
改变
"FROM thuis.order o IGNORE INDEX(connectieid, doorberekenen)"
至
" FROM thuis.order o IGNORE INDEX(connectieid, doorberekenen)"
如果没有它,restnameFROM 将变成一个单词,并且找不到 FROM 子句。
同样,您应该在大部分行的开头或结尾添加一个 space。
这应该有效:
String Retrieve
= "SELECT o.order_id , o.betalingsKenmerk , o.betaalMethode , o.tijdstipBezorging , o.datum"
+ ", o.adres , o.huisnummer , o.postcode , o.woonplaats , o.landCode , o.extrainfo , o.opmerking"
+ ", o.altEmail , o.voornaam , o.achternaam , o.bedrijfsnaam , o.telnummer , o.betaald , o.bezorgkosten"
+ ", o.totaalExBzg , o.siteCode , o.opmerking"
+ ", IF(o.transactieID = -1, 1,0) "
+ "AS pickup, r.rest_id, TRIM(CONCAT(r.naam, ' ', r.filiaal)) AS restname"
+ " FROM thuis.order o IGNORE INDEX(connectieid, doorberekenen)"
+ " INNER JOIN connectie c IGNORE INDEX(methode)"
+ " ON o.connectieId = c.id"
+ " AND c.methode = 26 "
+ " INNER JOIN restaurant r"
+ " ON o.restaurantRest_id = r.rest_id"
+ " WHERE o.datum >= TIMESTAMP(CURDATE())"
+ " AND o.order_statusOrder_status_id = '1'"
+ " AND o.order_statusOrder_device_id = ?"
+ " AND o.doorberekenen = '1'"
+ " AND ((o.bevestigingsId IS NULL OR o.bevestigingsId = 0) AND o.bevestigdDoor IS NULL)";
add a backtick in order </code> – Abhik Chakraborty</p>
</blockquote>
<p>成功了,但既然你在评论中回答了,我不能接受它作为答案,但谢谢你!</p>
<p>查询现在看起来像这样:</p>
<pre><code>String Retrieve
= "SELECT `o`.`order_id` , `o`.`betalingsKenmerk` , `o`.`betaalMethode` , `o`.`tijdstipBezorging` , `o`.`datum`"
+ ", `o`.`adres` , `o`.`huisnummer` , `o`.`postcode` , `o`.`woonplaats` , `o`.`landCode` , `o`.`extrainfo` , `o`.`opmerking`"
+ ", `o`.`altEmail` , `o`.`voornaam` , `o`.`achternaam` , `o`.`bedrijfsnaam` , `o`.`telnummer` , `o`.`betaald` , `o`.`bezorgkosten`"
+ ", `o`.`totaalExBzg` , `o`.`siteCode` , `o`.`opmerking`"
+ ", IF(`o`.`transactieID` = -1, 1,0) "
+ "AS pickup, `r`.`rest_id`, TRIM(CONCAT(`r`.`naam`, ' ', `r`.`filiaal`)) AS restname"
+ " FROM `thuis`.`order` o IGNORE INDEX(connectieid, doorberekenen)"
+ "INNER JOIN `connectie` c IGNORE INDEX(methode)"
+ "ON `o`.`connectieId` = `c`.`id`"
+ "AND `c`.`methode` = 26 "
+ "INNER JOIN `restaurant` `r`"
+ "ON `o`.`restaurantRest_id` = `r`.`rest_id`"
+ "WHERE `o`.`datum` >= TIMESTAMP(CURDATE())"
+ "AND o.order_statusOrder_status_id = '1'"
+ "AND o.order_statusOrder_device_id = ?"
+ "AND o.doorberekenen = '1'"
+ "AND ((o.bevestigingsId IS NULL OR o.bevestigingsId = 0) AND o.bevestigdDoor IS NULL)";
我正在尝试通过以下查询从我的数据库中检索信息:
String Retrieve
= "SELECT o.order_id , o.betalingsKenmerk , o.betaalMethode , o.tijdstipBezorging , o.datum"
+ ", o.adres , o.huisnummer , o.postcode , o.woonplaats , o.landCode , o.extrainfo , o.opmerking"
+ ", o.altEmail , o.voornaam , o.achternaam , o.bedrijfsnaam , o.telnummer , o.betaald , o.bezorgkosten"
+ ", o.totaalExBzg , o.siteCode , o.opmerking"
+ ", IF(o.transactieID = -1, 1,0) "
+ "AS pickup, r.rest_id, TRIM(CONCAT(r.naam, ' ', r.filiaal)) AS restname"
+ "FROM thuis.order o IGNORE INDEX(connectieid, doorberekenen)"
+ "INNER JOIN connectie c IGNORE INDEX(methode)"
+ "ON o.connectieId = c.id"
+ "AND c.methode = 26 "
+ "INNER JOIN restaurant r"
+ "ON o.restaurantRest_id = r.rest_id"
+ "WHERE o.datum >= TIMESTAMP(CURDATE())"
+ "AND o.order_statusOrder_status_id = '1'"
+ "AND o.order_statusOrder_device_id = ?"
+ "AND o.doorberekenen = '1'"
+ "AND ((o.bevestigingsId IS NULL OR o.bevestigingsId = 0) AND o.bevestigdDoor IS NULL)";
但是我得到一个错误:
[17-03-2015 10:20:57] [FATAL] [OrderCollector]
Error : com.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 'thuis.order o IGNORE INDEX(connectieid, doorberekenen)INNER JOIN connectie c IGN' at line 1
我已经从 netbeans 中的 Sql 管理器尝试对数据库进行此查询,它工作得很好,但是当我尝试为 java 重新键入它时,它只是不断发出上面的错误。
我找不到解决方案!
您缺少 space
改变
"FROM thuis.order o IGNORE INDEX(connectieid, doorberekenen)"
至
" FROM thuis.order o IGNORE INDEX(connectieid, doorberekenen)"
如果没有它,restnameFROM 将变成一个单词,并且找不到 FROM 子句。
同样,您应该在大部分行的开头或结尾添加一个 space。
这应该有效:
String Retrieve
= "SELECT o.order_id , o.betalingsKenmerk , o.betaalMethode , o.tijdstipBezorging , o.datum"
+ ", o.adres , o.huisnummer , o.postcode , o.woonplaats , o.landCode , o.extrainfo , o.opmerking"
+ ", o.altEmail , o.voornaam , o.achternaam , o.bedrijfsnaam , o.telnummer , o.betaald , o.bezorgkosten"
+ ", o.totaalExBzg , o.siteCode , o.opmerking"
+ ", IF(o.transactieID = -1, 1,0) "
+ "AS pickup, r.rest_id, TRIM(CONCAT(r.naam, ' ', r.filiaal)) AS restname"
+ " FROM thuis.order o IGNORE INDEX(connectieid, doorberekenen)"
+ " INNER JOIN connectie c IGNORE INDEX(methode)"
+ " ON o.connectieId = c.id"
+ " AND c.methode = 26 "
+ " INNER JOIN restaurant r"
+ " ON o.restaurantRest_id = r.rest_id"
+ " WHERE o.datum >= TIMESTAMP(CURDATE())"
+ " AND o.order_statusOrder_status_id = '1'"
+ " AND o.order_statusOrder_device_id = ?"
+ " AND o.doorberekenen = '1'"
+ " AND ((o.bevestigingsId IS NULL OR o.bevestigingsId = 0) AND o.bevestigdDoor IS NULL)";
add a backtick in order
</code> – Abhik Chakraborty</p> </blockquote> <p>成功了,但既然你在评论中回答了,我不能接受它作为答案,但谢谢你!</p> <p>查询现在看起来像这样:</p> <pre><code>String Retrieve = "SELECT `o`.`order_id` , `o`.`betalingsKenmerk` , `o`.`betaalMethode` , `o`.`tijdstipBezorging` , `o`.`datum`" + ", `o`.`adres` , `o`.`huisnummer` , `o`.`postcode` , `o`.`woonplaats` , `o`.`landCode` , `o`.`extrainfo` , `o`.`opmerking`" + ", `o`.`altEmail` , `o`.`voornaam` , `o`.`achternaam` , `o`.`bedrijfsnaam` , `o`.`telnummer` , `o`.`betaald` , `o`.`bezorgkosten`" + ", `o`.`totaalExBzg` , `o`.`siteCode` , `o`.`opmerking`" + ", IF(`o`.`transactieID` = -1, 1,0) " + "AS pickup, `r`.`rest_id`, TRIM(CONCAT(`r`.`naam`, ' ', `r`.`filiaal`)) AS restname" + " FROM `thuis`.`order` o IGNORE INDEX(connectieid, doorberekenen)" + "INNER JOIN `connectie` c IGNORE INDEX(methode)" + "ON `o`.`connectieId` = `c`.`id`" + "AND `c`.`methode` = 26 " + "INNER JOIN `restaurant` `r`" + "ON `o`.`restaurantRest_id` = `r`.`rest_id`" + "WHERE `o`.`datum` >= TIMESTAMP(CURDATE())" + "AND o.order_statusOrder_status_id = '1'" + "AND o.order_statusOrder_device_id = ?" + "AND o.doorberekenen = '1'" + "AND ((o.bevestigingsId IS NULL OR o.bevestigingsId = 0) AND o.bevestigdDoor IS NULL)";