2010-08-16 47 views
3

我正在使用java來提取mysql中表中時間列的值。在java中解決時間錯誤的錯誤格式?

下面的代碼顯示我發送的查詢。

String query="select id,time from table where Hour(time)<=32 "; 
ResultSet res = stmt.executeQuery(query); 
while (res.next()) { 
    String id = res.getString(1); 
    Time tc = res.getTime("time"); 
    System.out.println(tc); 
} 

時間值可以是負值(-56:00:00的意思,我們超越了一定的延時 的問題是,我得到:java.sql.SQLException:java.sql.SQLException: Bad format的時間「-05:49:48」在列2.

感謝您的幫助。

+1

列[時間]的類型是什麼? – 2010-08-16 13:37:03

回答

1

正如你的previous question回答你需要存儲和處理它作爲有符號整數存儲秒。

時間類型不能爲負數。您也無法對varchar/string進行數學運算,並按照Andreas_D的建議將其推回到可行的格式,這隻會增加不必要的開銷。有符號的整數實際上是您可以用於此的最佳數據類型。使用PreparedStatement#setInt()來存儲它並使用ResultSet#getInt()來獲取它。

+0

完全同意'不必要的開銷':) – 2010-08-16 15:14:06

2

如果由ResultSet實現完成的轉換不會負時間值的工作,那麼你仍然可以讀取值作爲字符串並實現自定義的方法來將字符串轉換爲一個日期(反之亦然):

String query="select * from table where Hour(time)<=32 "; 
    ResultSet res = stmt.executeQuery(query); 
    while (res.next()) { 
    String id = res.getString(1); 
    Time tc = convertToDate(res.getString("time")); 
    System.out.println(tc); 
    } 

    // .... 

} 

private Time convertToDate(String s) { 
    // implement magic here 

} 
0

我認爲問題出在查詢本身上。

當你直接運行查詢[select * from table where hour(time)< = 32]它不會返回錯誤嗎?我想錯誤是在where子句[小時(時間)< = 32]

結果集沒有任何有關where子句的信息。它只是返回所有的列。

你需要檢查列返回來檢查你是否沒有返回一些奇怪的類型。

1

也許這個答案太晚了。但是你可以解決它只是將字符串連接到你想要的字段。 我的意思是:

select id,concat(time,'') from table where Hour(time)<=32

問候 索爾伊達爾戈。

+0

他遇到的問題是該字段無法轉換爲Java'Time'對象 - 如何向它添加空字符串有幫助? – Tim 2012-03-11 07:04:18