我正在尝试在weppage上显示插入数据库的详细信息
我尝试将日期转换为sql日期
public static List<Detail> getAllRecords(){
List<Detail> list = new ArrayList<Detail>();
try{
Connection con = getConnection();
PreparedStatement ps = con.prepareStatement("select * from studentDetails");
ResultSet rs = ps.executeQuery();
while(rs.next()){
Detail u = new Detail();
java.sql.Date dbSqlDate = rs.getDate("dob");
u.setPassword(rs.getInt("password"));
u.setName(rs.getString("name"));
u.setLastname(rs.getString("lastname"));
u.setUsername(rs.getString("username"));
u.setEmail(rs.getString("email"));
u.setAddress(rs.getString("address"));
System.out.println("dbSqlDate=" + dbSqlDate);
u.setAge(rs.getInt("age"));
list.add(u);
}
}catch(Exception e){System.out.println(e);}
return list;
}
我希望输出为02/03/2000,但不起作用
答案 0 :(得分:1)
Quickfix是在建立连接时将 ?zeroDateTimeBehavior=convertToNull
添加到MySQL JDBC URL。
更长的答案的开始会指出...
默认情况下,MySQL允许将特殊的“零”日期值存储在DATE / DATETIME列中。检索时,这些值是格式为'0000-00-00'
的字符串。通过JDBC拉入Java时,Java不允许java.util.Date值具有该值。
某些sql_mode
设置可以禁止MySQL的“零”日期行为。我们可能还想确保该列允许使用NULL值(即,如果该列未定义为NOT NULL),和/或修改该列的定义以提供非零的默认值...
该列中已经存在的“零”日期值可以替换为NULL值,例如:
UPDATE `studentDetails` SET dob = NULL WHERE dob = '0000-00-00'
zeroDateTimeBehavior记录在这里:
https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html
此处记录了MySQL DATE行为
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html
节选:
MySQL允许您将
'0000-00-00'
的“零”值存储为“虚拟日期”。在某些情况下,这比使用NULL值更方便,并且使用较少的数据和索引空间。要禁止'0000-00-00'
,请启用NO_ZERO_DATE
模式。