-3

每当我运行这段代码时,我都会得到一个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);       
        }
    }
}
4

5 回答 5

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 注入的一个很好的例子。

于 2013-07-02T09:53:15.373 回答
1

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

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();
于 2013-07-02T10:11:11.107 回答
0

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

于 2013-07-02T09:57:44.760 回答
0

您缺少列值之间的逗号。作为一种更好的方法,您应该使用列名并相应地使用列值。将来如果表结构发生变化——比如添加一个新列是表,你的查询将开始失败。

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

在这里,您在列名和相应的值之间提供了紧密的映射。

于 2013-07-02T10:08:21.007 回答
0

只需尝试此行进行更新。

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

希望它对你有用。

于 2013-07-02T10:08:42.543 回答