转换为java日期为mySql
问题描述:
我正在使用Usercontroller,studentrepository,一些html模板,一个css样式表和一个mySql数据库进行StudentAdministration项目。一切都很好,我看到我的索引网站,但由于我的学生类的Date属性,创建学生时出现问题。转换为java日期为mySql
在我的控制,我这是怎么创建:
@Override
public void create(Student st) {
jdbc.update("INSERT INTO studentdb.student(firstName, lastName,
enrollmentDate, password, cpr)
" + "VALUES('" + st.getFirstName() + "',
'" +
st.getLastName() + "', '" + st.getEnrollmentDate() + "', '" +
st.getPassword() + "', '" + st.getCpr() + "') ");
}
问题是st.getEnrollmentDate,因为它给了我比1的MySql接受另一个日期格式。我应该在这里做什么?我宁愿不开始将Date属性更改为String,即使这可以解决问题。
答
尝试以下步骤: -
.Create Date对象。
Date now = new Date();
.Create通过使用构造构造SimpleDateFormat对象,
字符串图案= “YYYY-MM-DD”; SimpleDateFormat formatter = new SimpleDateFormat(pattern);
。现在使用format()方法将日期对象转换为模式中提供的文本格式。
String mysqlDateString = formatter.format(now);
答
您应该使用带有参数占位符的预处理语句,然后使用setDate
。您不应将值连接到查询字符串中。这让你打开SQL注入。
举个例子,你需要使用:
Connection connection = ..; // defined elsewhere
try (PreparedStatement pstm = connection.prepareStatement(
"INSERT INTO studentdb.student(firstName, lastName, enrollmentDate, password, cpr) " +
" VALUES (?, ?, ?, ?, ?)") {
pstmt.setString(1, st.getFirstName());
pstmt.setString(2, st.getLastName());
// assuming getEnrollmentDate() returns a java.util.Date
pstmt.setDate(3, new java.sql.Date(st.getEnrollmentDate().getTime());
// In a real system you should never store passwords like this!!
pstmt.setString(4, st.getPassword());
// Assuming getCpr() returns string
pstmt.setString(5, st.getCpr());
pstmt.executeUpdate();
}
注意保存像是密码不应该做。在真实的系统中,您可以使用PBKDF2或bcrypt等密码对密码进行哈希处理。
可能的重复[如何将Java日期存储到Mysql datetime ...?](https://stackoverflow.com/questions/2400955/how-to-store-java-date-to-mysql-datetime) –
有效!真棒。 现在,我只是把它放在我的创建控制器中,每次创建时都很愚蠢,还是这样可以吗?它是一个非常小的项目:) – Gustavbang
我认为没关系。但是如果你想用sql查询执行,你可以使用STR_TO_DATE,参见https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date –