1. 在Mysql資料庫中使用DATETIME類型來儲存時間,使用JDBC中讀取這個欄位的時候,應該使用 ResultSet.getTimestamp(),這樣會得到一個java.sql.Timestamp類型的資料。 2. 在這裡既不能使用 ResultSet.getDate(),也不能使用ResultSet.getTime(), 因為前者不包括time資料,後者不包括date資料。 3. 但是在使用ResultSet.getTimestamp()時也不是完全安全的,例如,當資料庫中的TIMESTAMP類型的欄位值為 '0000-00-00 00:00:00'時, 使用此方法進行讀取,會拋出異常:Cannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP, 這是因為JDBC不能將'0000-00-00 00:00:00'轉化為一個為一個java.sql.Timestamp, 在Java中,想建立一個java.util.Date,使其值為 '0000-00-00'也是不可能的,最古老的日期應該是'0001-01-01 00:00:00'。
4.所以,在JDBC URL中加入zeroDateTimeBehavior資訊,既可以解決:
String url = "jdbc:mysql://10.149.51.80:3306/test?relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull";
View Code
try { ps = DB.prepare(conn, sql_list); rs = ps.executeQuery(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); while(rs.next()){ User u = new User(); u.setId(rs.getInt("id")); u.setUserName(rs.getString("userName")); u.setPassword(rs.getString("password")); //rs.getTimestamp("regTime")返回"2011-04-21 11:30:33.0";mysql精確到毫秒 //df.format() ---> 去掉".0" u.setRegTime(df.format(rs.getTimestamp("regTime"))); u.setRealName(rs.getString("realName")); u.setRoleId(rs.getInt("roleId")); roleName = rs.getString("roleName"); list.add(u); } DB.close(rs); } catch (SQLException e) { e.printStackTrace(); }