2017-05-05 33 views
1

我使用Java和MySQL進行名稱搜索,然後才用於連接Oracle並且一切運行良好,現在我更改爲遷移到MYSQL並查看錯誤..截斷不正確INTEGER值:'%'在Java和MySQL中

MySQL的:

SELECT CAR.ID AS ID, 
    CAR.NAME AS NAME, 
    CAT.ID AS CATEGORY_ID, 
    CAT.NAME AS CATEGORY_NAME, 
    C.ID AS CITY_ID, 
    C.NAME AS CITY_NAME, 
FROM CARS CAR,  
    CATEGORY CAT, 
    CITY C 
WHERE LOWER(CAR.NAME) LIKE '%'||LOWER(?)||'%' 
    AND CAR.CATEGORY_ID   = CAT.ID 
    AND D.CITY_ID    = C.ID 
ORDER BY CAT.NAME, CAR.NAME 

當部署和調試進行搜索查詢,它發生了一個錯誤:

日誌消息:

SqlExceptionHelper - SQL Error: 1114, SQLState: HY000 
SqlExceptionHelper - The table 'C:\Windows\TEMP\#sql730_a_47' is full 
HibernateUtils - error at HibernateUtils.getListResult: could not extract ResultSet 
SqlExceptionHelper - SQL Warning Code: 1292, SQLState: HY000 
SqlExceptionHelper - Truncated incorrect INTEGER value: '%' 
SqlExceptionHelper - SQL Warning Code: 1114, SQLState: HY000 
SqlExceptionHelper - The table 'C:\Windows\TEMP\#sql730_a_47' is full 

MySQL表示:

#1064 - 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 '?)||'%' 
    AND CAR.CATEGORY_ID   = CAT.ID at line 50 

我怎樣才能解決這個問題?非常感謝

+0

你需要使用CONCAT進行連結PLZ刪除|| – Rams

+0

你的代碼循環如何? –

+0

注意:我刪除了Oracle和PL/SQL標籤。該錯誤是MySQL錯誤,因此代碼顯然是MySQL代碼。 –

回答

1

你的問題是(最初)標記爲MySQL和Oracle。問題本身和錯誤強烈表明MySQL是數據庫(例如Oracle不會產生MySQL錯誤)。

MySQL不使用||進行字符串連接。寫你的查詢正確的方法是:

SELECT CAR.ID AS ID, CAR.NAME AS NAME, CAT.ID AS CATEGORY_ID, 
     CAT.NAME AS CATEGORY_NAME, C.ID AS CITY_ID, C.NAME AS CITY_NAME, 
FROM CARS CAR JOIN  
    CATEGORY CAT 
    ON CAR.CATEGORY_ID = CAT.ID JOIN 
    CITY C 
    ON D.CITY_ID = C.ID 
WHERE LOWER(CAR.NAME) LIKE CONCAT('%', LOWER(?), '%') 
ORDER BY CAT.NAME, CAR.NAME; 

還要注意正確的使用JOIN語法。

+0

我明白了,它的工作,謝謝 –

1

相反的:

LIKE '%'||LOWER(?)||'%' 

您可以使用:

"...LIKE LOWER('%"+ str.toLowerCase() +"%')" 

或者:

Query query = "...LIKE LOWER('%?%')"; 
query.setParameter(1, str.toLowerCase()); 
+1

我明白了,謝謝! –

相關問題