2011-04-17 33 views
1

我不斷收到一個無效的異常,當我嘗試運行以下腳本: javax.servlet.ServletException:值java.sql.SQLException:[甲骨文] [ODBC] [奧拉] ORA-00904: 「CUSTID」:無效的標識符爲什麼我不斷得到這個被詛咒的SQL * Plus無效標識符錯誤?

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    conn = DriverManager.getConnection("jdbc:odbc:rreOracle","xxxxxx","xxxxxxxx"); 
    stmt = conn.createStatement(); 
    PreparedStatement preparedStatement; 

     //get parameters from the request 
     String custID=request.getParameter("cust_ID"); 
     String saleID=request.getParameter("sale_ID"); 
     String firstName=request.getParameter("first_Name"); 
     String mInitial=request.getParameter("mI"); 
     String lastName=request.getParameter("last_Name"); 
     String streetName=request.getParameter("street"); 
     String city=request.getParameter("city"); 
     String state=request.getParameter("state"); 
     String zipCode=request.getParameter("zip_Code"); 
     String DOB=request.getParameter("DOB"); 
     String agentID=request.getParameter("agent_ID"); 
     String homePhone=request.getParameter("home_Phone"); 
     String cellPhone=request.getParameter("cell_Phone"); 
     String profession=request.getParameter("profession"); 
     String employer=request.getParameter("employer"); 
     String referrer=request.getParameter("referrer"); 


    preparedStatement = conn.prepareStatement("UPDATE customer" 
+ " SET customer.cust_ID=?, customer.sale_ID=?, customer.first_Name=?, customer.mI=?, customer.last_Name=?, customer.street_Name=?, customer.city=?, customer.state=?, customer.zip_Code=?,customer. DOB=?, customer.agent_ID=?, customer.home_Phone=?, customer.cell_Phone=?, customer.profession=?, customer.employer=?, customer.referrer=?" 
+ " WHERE customer.cust_ID=custID ") ; 

    preparedStatement.setInt(1, Integer.valueOf(custID)); 
    preparedStatement.setInt(2, Integer.valueOf(saleID)); 
    preparedStatement.setString(3, firstName); 
    preparedStatement.setString(4, mInitial); 
    preparedStatement.setString(5, lastName); 
    preparedStatement.setString(6, streetName); 
    preparedStatement.setString(7, city); 
    preparedStatement.setString(8, state); 
    preparedStatement.setString(9, zipCode); 
    preparedStatement.setString(10, DOB); 
    preparedStatement.setInt(11, Integer.valueOf(agentID)); 
    preparedStatement.setString(12, homePhone); 
    preparedStatement.setString(13, cellPhone); 
    preparedStatement.setString(14, profession); 
    preparedStatement.setString(15, employer); 
    preparedStatement.setString(16, referrer); 

    preparedStatement.executeUpdate(); 
+2

你不使用SQL * Plus,它似乎... – 2011-04-18 01:42:10

回答

9

你可以嘗試

<%preparedStatement = conn.prepareStatement("UPDATE customer" 
+ " SET customer.cust_ID=?, customer.sale_ID=?, customer.first_Name=?, customer.mI=?, customer.last_Name=?, customer.street_Name=?, customer.city=?, customer.state=?, customer.zip_Code=?,customer. DOB=?, customer.agent_ID=?, customer.home_Phone=?, customer.cell_Phone=?, customer.profession=?, customer.employer=?, customer.referrer=?" 
+ " WHERE customer.cust_ID=?") ;%> 
<%preparedStatement.setString(17, custID);%> 

<%preparedStatement = conn.prepareStatement("UPDATE customer" 
+ " SET customer.cust_ID=?, customer.sale_ID=?, customer.first_Name=?, customer.mI=?, customer.last_Name=?, customer.street_Name=?, customer.city=?, customer.state=?, customer.zip_Code=?,customer. DOB=?, customer.agent_ID=?, customer.home_Phone=?, customer.cell_Phone=?, customer.profession=?, customer.employer=?, customer.referrer=?" 
+ " WHERE customer.cust_ID="+custID) ;%> 

希望它能幫助。

+0

謝謝Himanshu !!!那樣做了。你不知道我真的很感激它。我錯誤地認爲這個「custID」是第一個令我瘋狂的人,但它是第二個。 Woooooooow。我再也不會忘記,在將列等同於一個值時,我們再也不會忘記,這個值並沒有用引號括起來 - 現在我想到了基本編程101。再次感謝!!!! – Mike 2011-04-17 22:51:58

3

在聲明的這一部分,「WHERE customer.cust_ID = custID」oracle正在尋找名爲「custID」的值。

此時,上下文中的變量名稱不相關 - 在SQL中,「where A = B」語句引用「column A == column B」 - 因爲沒有「custID」列表,oracle抱怨。

+0

感謝您的解釋史蒂夫。你對Himanshu的上述修正加上了解釋。我明白我做錯了什麼。太感謝了!!! – Mike 2011-04-17 22:53:33