每当我运行此代码时,我都会收到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);
}
}
}
答案 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 +“)”);
希望它对你有用。