| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > SQL, в сервлетах |
| Автор: Vlad 12.3.2003, 03:35 |
| Никак не могу понять почему в данном сервлете в строке statement.executeQuery("INSERT INTO table2 VALUES(make, model)" ); Strings make and model, не загоняются в базу данных? Если ставлю одиночные кавычки, все приходит в норму. statement.executeQuery("INSERT INTO table2 VALUES('make',' model')" ); Спасибо public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { Connection con = null; make = request.getParameter("make"); model = request.getParameter("model"); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); con = DriverManager.getConnection("jdbc:odbc:auto"); if (con !=null) { Statement statement = con.createStatement(); statement.executeQuery("INSERT INTO table2 VALUES(make,model)" ); }//close if }//close try catch (SQLException sqle) { System.err.println(sqle.getMessage()); } catch (ClassNotFoundException cnfe) { System.err.println(cnfe.getMessage()); } catch (Exception e) { System.err.println(e.getMessage()); } finally { try { if (con != null) { con.close(); } } catch (SQLException sqle) { System.err.println(sqle.getMessage()); } } |
| Автор: AntonSaburov 12.3.2003, 03:41 | ||
Во-первых, лучше для INSERT, UPDATE, DELETE использовать executeUpdate - это правильнее. А во-вторых, в кавычки обязательно надо ставить - это же строковые значения. И на SQL команда именно с кавычками и посылается. Так что здесь никаких странностей нет. |
| Автор: Vlad 12.3.2003, 03:49 |
| если клиент отсылает параметры сервлету, двум стрингам model & make я присваиваю эти значения, как теперь эти стринги засунуть в SQL запрос. еще раз спасибо.... |
| Автор: SmaLL 12.3.2003, 17:21 | ||
Т.е. тебе нужен параметризованный запрос? Тогда используй preparedStatement. |
| Автор: AntonSaburov 12.3.2003, 18:00 | ||
IMHO - это наиболее удобное и правильное решение. Или в конце концов делай конкатенацию строк, но не забудь добавить кавычки. Что-то типа "INSERT INTO T1 (A,B) VALUES(' "+value2+" ',' "+value1+" ')" Видно плохо, поэтому я ординарные кавычки отделил пробелом, но только, чтобы их было видно. |
| Автор: Vlad 12.3.2003, 20:57 |
| Попробовал сделать, подобным образом и в базу записываются значения null. statement.executeUpdate("INSERT INTO table2 VALUES(' "+make+" ',' "+model+" ' )" ); |
| Автор: AntonSaburov 12.3.2003, 21:29 | ||
Список полей, как я понимаю, не нужен. У тебя всего два поля в таблице. А ты перед отправкой не смотрел, что за строка у тебя формируется ? Ты ее сначала сформируй, напечатай. И проверь. Потому как странно сие - должно все нормально работать. |
| Автор: Vlad 12.3.2003, 21:52 |
| Огромное спасибо! Все заработало. Сам лоханулся с подачей от клиента. |
| Автор: Vlad 13.3.2003, 03:59 |
| Антон еще один вопрос (Прости если я тебя задолбал) Cтроки джавы мы записываем в sql вышеупомянутым способом: statement.executeUpdate("INSERT INTO table2 VALUES(' "+value1+" ',' "+value2+" ' )" ); а как записать имя переменной “a”, допустим int a = 567; |
| Автор: AntonSaburov 13.3.2003, 16:55 | ||
| Тебе повезло, что я просматриваю все сообщения в разделе - в будущем, пожалуйста, не нарушай правила. Один вопрос - одна тема Т.е. для следующего вопроса начинай новую тему. Это больше нужно именно тем, кто спрашивает - можно просто перестать заходить в ту тему, где уже по идее все закончилось.
Я не очень понял вопрос. Если ты хочешь запрос использовать много раз и только подставлять параметры - то используй preparedStatement Connection con = ...; PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?"); pstmt.setBigDecimal(1, 153833.00); pstmt.setInt(2, 110592); А если просто сформировать строку - то statement.executeUpdate("INSERT INTO table2 VALUES("+value1+","+value2+")" ); В смысле не использовать кавычки вообще, только строки закрывать, а JAVA сама преобразует целое в строку и у тебя получится обычный SQL-запрос |