2012-12-27 30 views
1

我想用JSP插入幾個值到oracle表(oracle 10g)中。我一直在遇到ORA-01861錯誤...有人可以幫我解決。ORA-01861:文字不匹配jsp中的格式字符串

int eid = Integer.parseInt(request.getParameter("srno")); 
String enm = ""; 
int exit_tp = Integer.parseInt(request.getParameter("applntype")); 
int ecadre = 0; 
String ecdr = ""; 
String epost = ""; 
String edob = ""; 
String eappt_da = ""; 
String ecadre_date = ""; 
String edor = ""; 
String esubmitted_by = ""; 
String esubmitted_ip = ""; 
String ezn = ""; 
String ezone = ""; 
String edivision = ""; 
String ebranch = ""; 

String tmp = "select ep.name,ep.cadre,cd.descpn,epv.post,ep.dob,ef.appt_da,ep.cadre_date,add_months(ep.dob-1,720),z.short,ep.zone,ep.division,ep.branch " + 
     "from empfile ef,emp_prov ep,v$emp_prov epv,cadre cd,zone z " + 
     "where ep.srno=epv.srno(+) " + 
     "and ef.srno=ep.srno(+) " + 
     "and ep.cadre=cd.code(+) " + 
     "and ep.zone=z.zn(+) " + 
     "and ep.srno=" + eid; 

PreparedStatement stmt = conn.prepareStatement(tmp); 

ResultSet rset = stmt.executeQuery(); 

if (rset.next()) { 
    enm = rset.getString(1); 
    ecadre = rset.getInt(2); 
    ecdr = rset.getString(3); 
    epost = rset.getString(4); 
    edob = rset.getString(5); 
    eappt_da = rset.getString(6); 
    ecadre_date = rset.getString(7); 
    edor = rset.getString(8); 
    ezn = rset.getString(9); 
    ezone = rset.getString(10); 
    edivision = rset.getString(11); 
    ebranch = rset.getString(12); 
} 
rset.close(); 
stmt.close(); 

String tmp1 = "insert into online_exit(srno,name,exitcode,cadre,post,dob,appt_da,cadre_date,dor,submit_date,submit_stt,zone,division,branch) " + 
     "values (?,?,?,?,?,to_date(?,'DD/MM/YYYY'),to_date(?,'DD/MM/YYYY'),to_date(?,'DD/MM/YYYY'),to_date(?,'DD/MM/YYYY'),SYSDATE,2,?,?,?)"; 

PreparedStatement pstmt = conn.prepareStatement(tmp1); 

pstmt.setInt(1, eid); 
pstmt.setString(2, enm); 
pstmt.setInt(3, exit_tp); 
pstmt.setInt(4, ecadre); 
pstmt.setString(5, epost); 
pstmt.setString(6, edob); 
pstmt.setString(7, eappt_da); 
pstmt.setString(8, ecadre_date); 
pstmt.setString(9, edor); 
pstmt.setString(10, ezone); 
pstmt.setString(11, edivision); 
pstmt.setString(12, ebranch); 

pstmt.executeUpdate(); 

pstmt.close(); 
conn.close(); 

表的說明如下

Name          Null? Type 
----------------------------------------- -------- ------------ 
SRNO          NOT NULL NUMBER(6) 
NAME            VARCHAR2(50) 
EXITCODE           NUMBER(2) 
CADRE            NUMBER(2) 
POST            VARCHAR2(30) 
DOB            DATE 
APPT_DA           DATE 
CADRE_DATE           DATE 
CONF_STT           VARCHAR2(3) 
DOR            DATE 
VIG_DIS_STT          VARCHAR2(50) 
APPLN_DA           DATE 
APPLN_ACK_DA          DATE 
REC_CO_DA           DATE 
PREF_EXIT_DA          DATE 
NOTICE_PER_EXP_DA         DATE 
REASON            VARCHAR2(50) 
PENSION_OPT          VARCHAR2(2) 
REVERSN           VARCHAR2(2) 
COMP_AUTH           NUMBER 
EXIT_DATE           DATE 
SUBITTED_BY          NUMBER(6) 
SUBMIT_DATE          DATE 
SUBMITTED_IP          VARCHAR2(15) 
VALIDATED_BY          NUMBER(6) 
VALIDATED_ON          DATE 
VALIDATE_IP          VARCHAR2(15) 
SUBMIT_STT           NUMBER(2) 
ZONE            VARCHAR2(2) 
DIVISION           VARCHAR2(3) 
BRANCH            VARCHAR2(4) 

回答

1

使用ResultSet#getDate()方法返回java.sql.Date並調用PreparedStatement#setDate()方法來分配java.sql.Date到參數。

java.sql.Date edob; 
... 
if (rset.next()) { 
    ..... 
    edob = rset.getDate(5); 
    .... 
} 
.... 
String tmp1 = "insert into online_exit(srno,name,exitcode,cadre,post,dob,appt_da,cadre_date,dor," 
      +"submit_date,submit_stt,zone,division,branch) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 

PreparedStatement pstmt = conn.prepareStatement(tmp1); 

..... 
pstmt.setDate(6, edob); 
..... 

注意:如果你有字串的日期,然後使用SimpleDateFormat方法來解析字符串的日期。

編輯:

當我試圖初始化java.sql.Date edob =新java.sql.Date(),我得到 「構造日期()是未定義」 錯誤

您已經通過傳遞米利斯其構造函數來實例化java.sql.Date

java.sql.Date edob=new java.sql.Date(new java.util.Date().getTime()); 
//Or use java.sql.Date.valueOf() method 
java.sql.Date date=java.sql.Date.valueOf("2012-12-31"); 
+0

感謝回答.....我已經嘗試了上述的方法不同......當我試圖初始化java.sql.Date edob =新的java.sql.Date(),我得到「的構造函數日期()是未定義的」錯誤... – GVR

+0

謝謝噸....:)....它工作 – GVR