2013-07-02 26 views
-2

每當我運行此代碼時,我都會得到一個not enough values。可能會出現什麼問題?使用servlet將值插入到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+"')"); 

BTW。使用PreparedStatement 你的方式是SQL注入的一個很好的例子。

+0

哦,這樣一個愚蠢的錯誤,謝謝! –

0

您在values()子句中缺少逗號。來吧,要更小心。

+0

要更小心嗎?不,這是學習任何東西的最好方式。 –

+0

哦,這樣一個愚蠢的錯誤,謝謝! –

0

您錯過了列值之間的逗號。作爲一種更好的方法,你應該使用列名和相應的列值。將來,如果表格結構發生變化 - 就像添加一個新列一樣,表格會使您的查詢失敗。

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

這裏給出了列名與相應值之間的緊密映射。

0

只要嘗試更新這一行。

int i = stmt.executeUpdate(「insert into employee values('」+ 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();