2012-04-01 420 views
1

大家好!我的「日期」有問題。它需要被解析,但我不知道該怎麼做。可以通過在我的代碼上建議修復來幫助我嗎?Java中的解析日期

<% 
String format = "yyyy-MM-dd"; 
DateFormat df = new SimpleDateFormat(format); 
String faculty = request.getParameter("faculty"); 
String absent_date = request.getParameter("absent_date"); 
int intFaculty = Integer.parseInt(faculty); 

System.out.println(faculty); 
System.out.println(df.parse(absent_date)); 

java.sql.Date absentdate = new java.sql.Date(df.parse(absent_date).getDate()); 
Absences abs = new Absences(); 
abs.setFaculty_id(intFaculty); 
abs.setAbsent_date(absentdate); 
int result = AbsencesImpl.AddAbsences(abs); 
if (result == 0) 
{ 
%> 
    <jsp:forward page="ListAbsences.jsp"> 
    <jsp:param name="msg" value="Record Successfully Added"/> 
    <jsp:param name="ret" value="meron"/> 
    </jsp:forward> 
<% 
} 

%> 

對於控制檯的結果和錯誤:

5 
Tue May 01 00:00:00 CST 2012 
java.sql.SQLException: 3 values for 2 columns 

我發現這一點,但我不知道如何實現這個在我的代碼。

SimpleDateFormat parserSDF=new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy"); 

即時通訊使用Eclipse靛藍,SQLite的,和Apache Tomcat

插入語句(IM使用MVC)

public int AddAbsences(Absences abs) 
{ 
    Connection con = null; 
    PreparedStatement pstmt; 
    ConnDB conn = new ConnDB(); 
    String sql = "INSERT INTO absences(faculty_id, absent_date) VALUES(?, ?)"; 

    try{ 
     con = conn.connect(); 
     try{ 
      pstmt = con.prepareStatement(sql); 
      pstmt.setInt(1, abs.getFaculty_id()); 
      pstmt.setDate(2, abs.getAbsent_date()); 

      pstmt.executeUpdate(); 
     }catch(Exception e){ 
      System.out.println(e); 
     } 
     con.close(); 
    }catch(Exception e){ 
     System.out.println(e); 
    } 
    return 0; 
} 
+1

我認爲你的sql是錯誤的。您爲2列插入3個值。向我們展示插入查詢。 – 2012-04-01 07:22:59

+0

我知道這並不是100%的答案,但只要您需要使用Java中的日期,請親自動手並使用Joda Time。 http://joda-time.sourceforge.net/ – moodywoody 2012-04-01 07:23:19

+0

我已經包含了插入語句。 – Zark 2012-04-01 07:28:40

回答

0

我會建議使用

df.parse(absent_date).getTime() 

,而不是

df.parse(absent_date).getDate() 

此外,我懷疑你有3列缺席,但你嘗試只插入2個值。如果表中的一個值是id,那麼我懷疑這個值不是自動生成的。

希望它能幫助你。

+0

非常感謝主席先生的回答。它解決了我的兩個問題。乾杯! – Zark 2012-04-01 08:20:55

+0

我注意到在我的數據庫中插入的日期是「30.12.1899」。他們全部。但在瀏覽器或jsp中。它顯示選定的日期。例如:在瀏覽器(「2012-04-24」)中,但在數據庫中(「30.12.1899」)。這裏可能是什麼問題? – Zark 2012-04-01 08:35:00

0

試着制定一個插入語句,它將從數據庫管理控制檯(這是你的數據庫)工作,然後嘗試用代碼中的參數代替它。在那裏你也會得到日期格式。有一些SQL日期函數可以在查詢本身中使用,它將從您的代碼可讀格式中轉換日期。

例如:在MsSQL中 - cast('20120312'作爲日期時間)將字符串日期12-03-2012轉換爲日期時間。

嘗試爲您的數據庫類型搜索sql日期函數。