#java #sql #oracle #jdbc #ora-00904
#java #sql #Oracle #jdbc #ora-00904
Вопрос:
Я продолжаю получать исключение недопустимого идентификатора при попытке запустить приведенный ниже скрипт: 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();
Комментарии:
1. Похоже, вы не используете 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 ) ;%>
Надеюсь, это поможет.
Комментарии:
1. Спасибо Химаншу!!! Это сделало это. Вы не представляете, как я это ценю. Я ошибочно предположил, что «CustID», о котором идет речь, был первым, который свел меня с ума, но это был второй. Ууууууууу. Я никогда в жизни больше не забуду, что приравнивая столбец к значению, значение не заключено в кавычки — базовое программирование 101 теперь, когда я думаю об этом. Еще раз спасибо!!!!
Ответ №2:
В этой части вашего заявления «ГДЕ customer.cust_ID=CustID» oracle ищет значение с именем «CustID».
На этом этапе имена переменных в вашем контексте не имеют значения — внутри SQL оператор «where A = B» ссылается на «столбец A == column B» — поскольку в таблице нет столбца «CustID», oracle жалуется.
Комментарии:
1. Спасибо за объяснение, Стив. Ваше объяснение, добавленное к приведенному выше исправлению от Himanshu, сделало свое дело. Я вижу, что я делал неправильно. Миллион благодарностей!!!