转换为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,即使这可以解决问题。

+2

可能的重复[如何将Java日期存储到Mysql datetime ...?](https://*.com/questions/2400955/how-to-store-java-date-to-mysql-datetime) –

+0

有效!真棒。 现在,我只是把它放在我的创建控制器中,每次创建时都很愚蠢,还是这样可以吗?它是一个非常小的项目:) – Gustavbang

+0

我认为没关系。但是如果你想用sql查询执行,你可以使用STR_TO_DATE,参见https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date –

尝试以下步骤: -

.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等密码对密码进行哈希处理。