2013-07-02 2 views
-2

Всякий раз, когда я запускаю этот код, я получаю not enough values. Что может пойти не так?Вставить значения в базу данных SQL с помощью сервлета

Вот мой код:

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.sql.*; 
import java.io.*; 

public class Base extends HttpServlet 
{ 
    public void doGet(HttpServletRequest req,HttpServletResponse res)throws 
IOException,ServletException 
    { 
     String eid=req.getParameter("t1"); 
     String name=req.getParameter("t2"); 
     int sal=Integer.parseInt(req.getParameter("t3")); 
     Connection con=null; 
     Statement stmt=null; 
     PrintWriter out=res.getWriter(); 
     try 
     { 
       Class.forName("oracle.jdbc.driver.OracleDriver"); 
       con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","intelinside"); 
       stmt=con.createStatement(); 
       int i = stmt.executeUpdate("insert into emp values('"+eid+"''"+name+"''"+sal+"')"); 
       if(i>0) 
       out.println("Inserted Successfully"); 
       else 
       out.println("Insert Unsuccessful"); 
     } 
     catch(Exception e) 
     { 
      out.println(e);  
     } 
    } 
} 
+4

В чем Ваш вопрос? – PermGenError

+0

Ошибка отображается недостаточно. –

+0

, так что мы волшебно знаем, что такое ошибка? обновите свой вопрос с помощью ошибки – PermGenError

ответ

3

Ваш SQL неправильно:

int i=stmt.executeUpdate("insert into emp values('"+eid+"''"+name+"''"+sal+"')"); 

где находится , между колоннами?

изменить его к этому:

int i=stmt.executeUpdate("insert into emp values('"+eid+"','"+name+"','"+sal+"')"); 

кстати. используйте PreparedStatement Ваш путь - довольно хороший пример для SQL-Injection.

+0

Ох, такая глупая ошибка! –

0

Вы не указали запятую в своем предложении values ​​(). Пошли, будьте осторожны.

+0

Будьте осторожны? Нет. Это лучший способ узнать что-нибудь. –

+0

Ох, такая глупая ошибка! –

0

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

"insert into emp(employyeId, empName, empSalary) values('"+eid+"','"+name+"','"+sal+"')" 

Здесь вы даете плотное сопоставление между именами столбцов и соответствующими значениями.

0

Просто попробуйте эту строку для обновления.

int i = stmt.executeUpdate ("вставить в значения работника ('" + eid + "', '" + name + "'," + sal + ")");

Надеюсь, что это сработает для вас.

2

Вы пропустили установку запятыми между значениями столбца.

int i=stmt.executeUpdate("insert into emp values('"+eid+"','"+name+"','"+sal+"')"); 

Но я предлагаю использовать PreparedStatement вместо этого. В противном случае ваш код будет широко открыт для SQL-инъекций. Специально, потому что вы извлекаете пользовательский ввод через Интернет в качестве параметров запроса без какой-либо проверки.

PreparedStatement pstmt = con.prepareStatement("INSERT INTO emp VALUES(?, ?, ?)"); 

pstmt.setString(1, eid); 
pstmt.setString(2, name); 
pstmt.setString(3, sal); 

int i = pstmt.executeUpdate(); 
Смежные вопросы