[英]SQL Syntax in JAVA using JDBC
Statement stmt = null;
String query = "SELECT CarLot.CAR.Make, CarLot.CAR.Model, CarLot.CAR.Year, CarLot.CAR.Sold_Status, CarLot.OWNER.First_Name,CarLot.OWNER.Last_Name"+
"FROM CarLot.CAR, CarLot.OWNER" +
" WHERE CarLot.CAR.Sold_Status = TRUE";
try {
con = getConnection();
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
String heading1 = " Make"; String heading2 = " Model"; String
heading3 = " Year"; String heading4="Sold Status";
System.out.printf("%-20s %-20s %-20s %-20s\n", heading1, heading2,
heading3,heading4);
System.out.println("--------------------------------------------------------------------------\n");
while (rs.next()) {
String make = rs.getString("car.Make");
String model = rs.getString("car.Model");
int carYear = rs.getInt("car.Year");
boolean soldStatus = rs.getBoolean("car.Sold_Status");
String firstName = rs.getString("owner.First_Name");
System.out.printf("%-2s %-20s %-20s %-20s %-20s\n",
make, model, carYear,soldStatus,firstName);
}
System.out.println("\n\n");
} finally {
stmt.close();
}
我遇到的問題是SQL語法錯誤,該語法在MySql Workbench 6.0中有效,但在Java應用中無法通過JDBC使用,對於SQl和JDBC來說我是新手,我意識到此查詢的結果集可能不是100%,這也可能是問題,它來自共享方法,在這種情況下,我更關心SQL查詢語句。
問題是您在最后選擇的列名和FROM
之間缺少空格。 為了解釋您的查詢,您需要:
String query = "SELECT ..., CarLot.OWNER.Last_Name"+ // oops, no space!
"FROM CarLot.CAR, CarLot.OWNER" +
" WHERE CarLot.CAR.Sold_Status = TRUE";
這個錯誤是很常見的,因為它很難看到一個失蹤的空間在一行的末尾,但我用來對付這樣的代碼風格-我把空間在該行的開始 ,就像這樣:
String query = "SELECT CarLot.CAR.Make, CarLot.CAR.Model, CarLot.CAR.Year, CarLot.CAR.Sold_Status, CarLot.OWNER.First_Name,CarLot.OWNER.Last_Name"+
" FROM CarLot.CAR, CarLot.OWNER" +
" WHERE CarLot.CAR.Sold_Status = TRUE";
每行都以雙引號開頭,即" ...
,因此當斷行的字符串缺少空格時,這是很明顯的,而且由於SQL(通常)對空格不敏感,因此您也可以在末尾放置空格而不必造成任何問題。
在FROM
子句之前添加一個空格
String query = "SELECT CarLot.CAR.Make, CarLot.CAR.Model, CarLot.CAR.Year, CarLot.CAR.Sold_Status, CarLot.OWNER.First_Name,CarLot.OWNER.Last_Name" +
" FROM CarLot.CAR, CarLot.OWNER" +
" WHERE CarLot.CAR.Sold_Status = TRUE";
另外:考慮使用PreparedStatement
防止SQL注入攻擊
查詢的第一行和第二行之間沒有空格,因此可以select
... CarLot.OWNER.Last_NameFROM CarLot
...。 添加空間,看看會發生什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.