2017-03-01 87 views
1

我試圖讓鍵盤輸入,從我的Java項目尋找一個車牌號碼(VARCHAR),從我的數據庫進行搜索。我在測試程序類中遇到了關於SQL語法錯誤的錯誤。什麼是正確的程序,以便當我搜索許可證時,它將顯示該許可證。在此先感謝SQL命令從Java程序

public Car getCar(String searchLicense) { 
    Car foundCar = new Car(); 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     Connection conn = DriverManager.getConnection(url + dbName, userName, password); 
     statement = conn.createStatement(); 
     resultSet = statement.executeQuery(
       "select * from eflow.registration.cLicense where="+searchLicense); 

     while (resultSet.next()) { 
      foundCar = new Car(resultSet.getInt("cID"), resultSet.getString("cLicense"), 
        resultSet.getInt("cJourneys"), resultSet.getString("cUsername"), 
        resultSet.getString("cPassword").toString()); 
     } 
     conn.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return foundCar; 
} 
+0

添加錯誤信息 – Jens

+0

您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的'.cLicense where ='附近使用正確的語法。 – user3079838

+0

'eflow.registration.cLicense'應該是什麼? – Jens

回答

0

您談論的直接問題是,您在查詢中缺少引號,因爲它是一個字符串。所以@達科達在評論中建議應該解決它。

然而,這裏更大的問題是,你很容易受到SQL injection,因爲你是允許用戶輸入到你的查詢。如果我將輸入像xxx' or 'a' ='a我將能夠獲取您的整個數據庫。

您應該使用參數化查詢,以保護自己

+0

這裏是消息我改變代碼 你在你的SQL語法錯誤後獲得;檢查對應於你的MySQL服務器版本使用附近的「」在1號線 – user3079838

1

你缺少的單引號和列名也..

resultSet = statement.executeQuery(
        "select * from eflow.registration.cLicense where cLicenseName='"+searchLicense+"'"); 

比較好的解決辦法,試試這個..

resultSet = statement.executeQuery(
       "select * from eflow.registration.cLicense where cLicenseName like '%"+searchLicense+"%'"); 
+0

他從db.table.column'的eFlow選擇正確的語法手冊.registration.cLicense'你是否檢查過,這是你解決的第二個錯誤:) –

+0

但是他沒有提及任何列名以及表名。 –