为啥我不断收到这个受诅咒的 SQL*Plus 无效标识符错误?
Posted
技术标签:
【中文标题】为啥我不断收到这个受诅咒的 SQL*Plus 无效标识符错误?【英文标题】:Why do I keep getting this cursed SQL*Plus invalid identifier error?为什么我不断收到这个受诅咒的 SQL*Plus 无效标识符错误? 【发布时间】:2011-04-17 20:41:27 【问题描述】:当我尝试运行以下脚本时,我不断收到无效标识符异常: javax.servlet.ServletException:java.sql.SQLException:[Oracle][ODBC][Ora]ORA-00904:“CUSTID”:标识符无效
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();
【问题讨论】:
您没有使用 SQL*Plus,看来... 【参考方案1】:你可以试试
<%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 ) ;%>
希望对你有帮助。
【讨论】:
谢谢Himanshu!!!做到了。你不知道我有多感激它。我错误地认为有问题的“custID”是第一个让我发疯的,但它是第二个。呜呜呜。我永远不会忘记,在将一列等同于一个值时,该值没有用引号括起来——现在我想到了基本编程 101。再次感谢!!!!【参考方案2】:在您的语句“WHERE customer.cust_ID=custID”的这一部分中,oracle 正在寻找一个名为“custID”的值。
此时,您的上下文中的变量名称不相关 - 在 SQL 中,“where A=B”语句引用“A 列 == B 列” - 因为表中没有“custID”列,甲骨文抱怨。
【讨论】:
感谢史蒂夫的解释。您的解释添加到 Himanshu 的上述更正中起到了作用。我明白我做错了什么。谢谢一百万!!!以上是关于为啥我不断收到这个受诅咒的 SQL*Plus 无效标识符错误?的主要内容,如果未能解决你的问题,请参考以下文章
在 kivy 样式文件中使用尖括号时,为啥我不断收到“无效语法”错误?