使用servlet将值插入SQL数据库

时间:2013-07-02 09:48:07

标签: java oracle

每当我运行此代码时,我都会收到not enough values。可能出现什么问题?

这是我的代码:

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);       
        }
    }
}

5 个答案:

答案 0 :(得分: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的一个很好的例子。

答案 1 :(得分:2)

您错过了将逗号放在列值之间。

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

但是,我建议改用 PreparedStatement 。您的代码对SQL注入攻击是开放的。特别是,因为您通过Web获取用户输入作为请求参数而没有任何验证。

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

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

int i = pstmt.executeUpdate();

答案 2 :(得分:0)

你在values()子句中缺少逗号。来吧,小心点。

答案 3 :(得分:0)

您在列值之间缺少逗号。作为更好的方法,您应该使用列名称和相应的列值。将来,如果表结构发生更改(如添加了新列),则表示查询将开始失败。

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

这里给出了列名和相应值之间的紧密映射。

答案 4 :(得分:0)

只需尝试此行进行更新。

int i = stmt.executeUpdate(“插入员工值('”+ eid +“','”+ name +“',”+ sal +“)”);

希望它对你有用。