2012-11-17 24 views
2

我正在使用以下代碼將值插入到表中。使用jsp將值插入到oracle表中

String sql = "INSERT INTO APPLICATION VALUES (?,?,?,?,?,?,TO_DATE(?,'DD/MMYYYY'),?,TO_DATE(?,'DD/MM/YYYY'),?,?,?,?,?,SYSDATE,'X',?)"; 
PreparedStatement pstmt = conn.prepareStatement(sql); 
pstmt.setInt(1,Integer.parseInt(sr)); 
pstmt.setString(2,nm); 
pstmt.setString(3,(String)session.getValue("ITSGTYP")); 
pstmt.setString(4,pst); 
pstmt.setString(5,dox); 
pstmt.setString(6,zo); 
pstmt.setString(7,dob); 
pstmt.setString(8,cdr); 
pstmt.setString(9,cdrdt); 
pstmt.setString(10,qual); 
pstmt.setString(11,mail); 
pstmt.setString(12,bond); 
pstmt.setInt(13,Integer.parseInt((String)session.getValue("USER"))); 
pstmt.setString(14,request.getRemoteAddr()); 
pstmt.setString(17,place); 

到其中的值被插入是如下

EMP_ID     NOT NULL NUMBER(6) 
NAME      VARCHAR2(25) 
APPLN_TYP     VARCHAR2(10) 
POST      VARCHAR2(100) 
DIV      VARCHAR2(25) 
ZONE      VARCHAR2(5) 
DOB      DATE 
CADRE      VARCHAR2(5) 
CADRE_DATE    DATE 
QUALIFICATION    VARCHAR2(100) 
EMAIL_ID     VARCHAR2(70) 
BOND      VARCHAR2(3) 
SUBMITTED_BY    NUMBER(6) 
SUBMIT_IP     VARCHAR2(30) 
SUBMIT_DATE    DATE 
FLAG      VARCHAR2(1) 
PLACE      VARCHAR2(20) 

在執行上面的代碼我正在以下錯誤

Error: java.sql.SQLException: Invalid column index 

此查詢是工作表中的描述罰款之前。

我的上一張表沒有PLACE列。我不得不在稍後插入它。

回答

0

更換pstmt.setString(17,place);

pstmt.setString(15,place);

的理由讓你得到的錯誤是:

你沒有17個?符號在查詢中準備好的語句,你只有15 ?符號,這意味着您只能爲該準備好的語句設置15個值(對於15列)。

現在你在做的是你在第17個索引處設置了一個參數,並且在查詢中沒有在索引17處指定任何列,只有15個列和15個?符號用於插入值分別在15列。

因此,將其替換爲我上面提到的,它將起作用。

+0

非常感謝...其工作.. :) – GVR

1

它的安全,包括要插入像SQL語句中的列名:

String sql = "INSERT INTO APPLICATION VALUES (EMP_ID,NAME, ....) // etc 
(?,?,?,?,?,?,TO_DATE(?,'DD/MMYYYY'),?,TO_DATE(?,'DD/MM/YYYY'),?,?,?,?,?,SYSDATE,'X',?)"; 

通過這種方式,你有索引和你正在使用你的語句中的列進行更多的控制。

0

在您的查詢中有15個參數可供設置。而你正在試圖給出第17個指數的價值。你應該將其更改爲15,而不是17

pstmt.setString(15位)的;