2010-01-06 164 views
0

我想製作Restful - 使用netbean 6.5的web服務,glassfish v 2,並且我已經讓表和表之間的關係了。但是,當我想測試RESTful Web服務,一些表顯示它HTTP狀態500

HTTP Status 500 - 

type Exception report 

message 

descriptionThe server encountered an internal error() that prevented it from fulfilling this request. 

exception 

Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b04-fcs (04/11/2008))): oracle.toplink.essentials.exceptions.DatabaseException 
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'E' in 'field list' 
Error Code: 1054 
Call: SELECT Id, MobileNumber, Country, First_Name, E-mail, Address, Identity, Zip, Last_name, City, State, Position FROM employee_table WHERE (Id = ?) 
    bind => [1] 
Query: ReadObjectQuery(ws.EmployeeTable) 

note The full stack traces of the exception and its root causes are available in the Sun Java System Application Server 9.1_02 logs. 

但有些表的工作。有人知道是什麼原因導致這個問題,以及如何解決這個問題?謝謝。

THX安德魯醫學生,和吉姆Ferrans

我改變我所有的電子郵件到電子郵件。我不會忘記不要在DB中再添加「 - 」。 thx

回答

1

您需要引用「電子郵件」列名稱,以便SQL解析器將接受它。沒有引號/轉義的短劃線是SQL中的減法運算符,因此「E-mail」不加引號表示您要求SQL服務器減去名爲「E」和「mail」的列的結果。

正確的SQL是:

SELECT Id, MobileNumber, Country, First_Name, `E-mail`, Address, Identity, Zip, Last_name, City, State, Position FROM employee_table WHERE (Id = ?) 
+0

Thx現在正在工作。我將所有電子郵件轉換爲電子郵件後。 – Huuhaacece 2010-01-06 05:02:17

+0

注意反向轉義是一種非標準的MySQLism。根據ANSI SQL應該使用雙引號。通過設置ANSI_QUOTES SQL_MODE可以獲得此行爲。 – bobince 2010-01-06 05:12:09

1

您在SQL查詢(「電子郵件」)中有非法標識符。如果這是實際的列名,Andrew建議引用它是適當的解決方案。儘管你可能在查詢中拼寫錯誤。

+0

你的意思是什麼,我必須改變電子郵件成別的東西? – Huuhaacece 2010-01-06 04:51:44

+0

這取決於您的列名在SQL模式中的真實含義。例如,如果它是「E_mail」,那麼您只需要在查詢中修復拼寫。 – 2010-01-06 04:53:38

相關問題