2017-10-06 74 views
-1

我正在使用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://stackoverflow.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 –

回答

-1

嘗試以下步驟: -

.Create Date對象。

Date now = new Date();

.Create通過使用構造構造SimpleDateFormat對象,

字符串圖案= 「YYYY-MM-DD」; SimpleDateFormat formatter = new SimpleDateFormat(pattern);

。現在使用format()方法將日期對象轉換爲模式中提供的文本格式。

String mysqlDateString = formatter.format(now);

0

您應該使用帶有參數佔位符的預處理語句,然後使用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等密碼對密碼進行哈希處理。