簡體   English   中英

數據截斷:錯誤的日期時間值:“

[英]Data truncation: Incorrect datetime value: ''

誰能通過示例JSP代碼幫助我,以通過JDBC在MySql數據庫中存儲日期? 當我嘗試執行下面給出的代碼時,出現以下異常:

com.mysql.jdbc.MysqlDataTruncation:數據截斷:不正確的datetime值:第1行的'date'列的''

如何克服這個問題? 以下是我的代碼:

Connection con = null;

String StaffName = request.getParameter("StaffName");
// String subcode = request.getParameter("subcode");
String hourId = request.getParameter("hourId");
if (hourId == null)
    hourId = "";
String day = request.getParameter("day");
if (day == null)
    day = "";
String date = request.getParameter("date");
try {
    Class.forName("com.mysql.jdbc.Driver");
    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/StaffAllocation", "root", "success");

    // PreparedStatement stat = con.PrepareStatement();
    String updateString = "INSERT INTO tblstaffallocation (StaffName,hourId,daysId,date) VALUES (?,?,?,?)";
    PreparedStatement preparedStatement = con.prepareStatement(updateString);

    preparedStatement.setString(1, StaffName);
    preparedStatement.setInt(2, 0);
    preparedStatement.setInt(3, 0);
    preparedStatement.setString(4, date);
} catch (Exception e) {
    out.print(e);
}

要將日期設置為准備好的語句,您需要更改值的類型:

String date = request.getParameter("date");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // your template here
java.util.Date dateStr = formatter.parse(date);
java.sql.Date dateDB = new java.sql.Date(dateStr.getTime());

現在將String date轉換為java.sql.Date並使用另一種方法:

preparedStatement.setDate(4,dateDB);

我有一個類似的錯誤。 事實證明,我只需要更新mysql-connector-java的jar版本(使用Maven)

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>...</version>
    </dependency>

嘗試重新設定日期

   String date = new SimpleDateFormat("yyyy-MM-dd")
                             .format(new Date(request.getParameter("date")));

然后插入數據庫。 請注意,request.getParameter(“ date”)的格式應為2013年11月20日,否則您可以使用類似的方式來實現。

確保您嘗試插入表中的“日期”值與表中“日期”列中定義的格式完全相同。

在此處輸入圖片說明

如果有人將實體字段的數據類型標注為@Temporal錯誤類似,則對我來說,解決方案是將TemporalType.TIMESTAMP的標注值替換為TemporalType.TIME

@Temporal(TemporalType.TIMESTAMP)
private Date dateField;

應該是這樣的:

@Temporal(TemporalType.TIME)
private Date dateField;

解決此問題的另一種方法而無需更改代碼(至少對我而言)(至少對我而言)是在更高的Tomcat版本上運行應用程序,希望它會有所幫助。

我知道這是一個舊線程,但是這些解決方案都無法為我解決問題。 對我有用的是將休眠模式升級到5.2.10.Final版本(請參閱此SO post )。

運行Spring Boot和Spring Data JPA 1.5.4.RELEASE和hibernate 5.2.10.Final。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM