1. 程式人生 > >java.lang.IllegalArgumentException java.sql.Date.getHours的解決方案(SSH)

java.lang.IllegalArgumentException java.sql.Date.getHours的解決方案(SSH)

問題描述:

Caused by: java.lang.IllegalArgumentException

at java.sql.Date.getHours(Date.java:143)

這是由於於java.util.Date 和 java.sql.Date的轉換問題造成的。

第一種解決方案,如果資料庫中儲存的是時間型別的話,就把hibernate的*.hbm.xml檔案中的時間型別改成時間型別java.sql.Date改成java.util.Date。或者直接換成java.sql.Timestamp都成。

例如:

<key-property name="timeCs" type="java.sql.Date">
                <column name="Time_CS" length="10" />
            </key-property>

第二種如果某些情況資料庫中儲存的就是日期型的東西,沒辦法這種轉換就可以採用如下方法——採用通過JsonConfig註冊對應的Date型別java.sql.Date;

//定義配置檔案,並且註冊時間型別

JsonConfig jsonConfig = new JsonConfig(); 
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);

// resolve  java.lang.IllegalArgumentException java.sql.Date.getHours(Date.java:177)
jsonConfig.registerJsonBeanProcessor(java.sql.Date.class, new DateJsonValueProcessor());

//resolve  java.sql.SQLException: Positioned Update not supported.
jsonConfig.setExcludes(new String[]{"handler","hibernateLazyInitializer"}); 
//進行轉換操作
JSONArray.fromObject(list,jsonConfig);



//過載型別
class DateJsonValueProcessor implements JsonBeanProcessor {

public JSONObject processBean(Object bean, JsonConfig arg1) {
JSONObject jsonObject = null;
        if( bean instanceof java.sql.Date ){
             bean = new Date( ((java.sql.Date) bean).getTime() );
        }
        if( bean instanceof java.sql.Timestamp ){
            bean = new Date( ((java.sql.Timestamp) bean).getTime() );
        }
        if( bean instanceof Date ){
             jsonObject = new JSONObject();
             jsonObject.element("time", ( (Date) bean ).getTime());
        }else{
             jsonObject = new JSONObject( true );
        }
          return jsonObject;
       }
}