Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата
Никак не могу понять почему в данном сервлете в строке
statement.executeQuery("INSERT INTO table2 VALUES(make, model)" );
Strings make and model, не загоняются в базу данных?
Если ставлю одиночные кавычки, все приходит в норму.
statement.executeQuery("INSERT INTO table2 VALUES('make',' model')" );
Спасибо


Во-первых, лучше для INSERT, UPDATE, DELETE использовать
executeUpdate - это правильнее.

А во-вторых, в кавычки обязательно надо ставить - это же строковые значения. И на SQL команда именно с кавычками и посылается. Так что здесь никаких странностей нет.

Автор: Vlad 12.3.2003, 03:49
если клиент отсылает параметры сервлету, двум стрингам model & make я присваиваю эти значения, как теперь эти стринги засунуть в SQL запрос.
еще раз спасибо....

Автор: SmaLL 12.3.2003, 17:21
Цитата(Vlad @ 11.3.2003, 19:49)
если клиент отсылает параметры сервлету, двум стрингам model & make я присваиваю эти значения, как теперь эти стринги засунуть в SQL запрос.
еще раз спасибо....

Т.е. тебе нужен параметризованный запрос?
Тогда используй preparedStatement.

Автор: AntonSaburov 12.3.2003, 18:00
Цитата
Т.е. тебе нужен параметризованный запрос?
Тогда используй preparedStatement.


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
Цитата
statement.executeUpdate("INSERT INTO table2 VALUES(' "+make+" ',' "+model+" ' )" );


Список полей, как я понимаю, не нужен. У тебя всего два поля в таблице.

А ты перед отправкой не смотрел, что за строка у тебя формируется ?
Ты ее сначала сформируй, напечатай. И проверь.

Потому как странно сие - должно все нормально работать.

Автор: 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
Тебе повезло, что я просматриваю все сообщения в разделе - в будущем, пожалуйста, не нарушай правила.

Один вопрос - одна тема

Т.е. для следующего вопроса начинай новую тему. Это больше нужно именно тем, кто спрашивает - можно просто перестать заходить в ту тему, где уже по идее все закончилось.

Цитата
а как записать имя переменной “a”, допустим int a = 567;


Я не очень понял вопрос. Если ты хочешь запрос использовать много раз и только подставлять параметры - то используй 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-запрос

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)