wake-up-neo.com

Datenkürzung: Falscher Datums-/Uhrzeitwert: ''

Kann mir jemand mit einem Beispiel-JSP-Code zum Speichern des Datums in einer MySQL-Datenbank über JDBC helfen? Wenn ich versuche, den unten angegebenen Code auszuführen, erhalte ich die folgende Ausnahme:

com.mysql.jdbc.MysqlDataTruncation: Datenkürzung: Falscher Datums-/Uhrzeitwert: '' für Spalte 'Datum' in Zeile 1

Wie kann dieses Problem gelöst werden? Folgendes ist mein Code:

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);
}
9
user2951465

Um das Datum für die vorbereitete Anweisung festzulegen, müssen Sie den Werttyp ändern:

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());

konvertieren Sie jetzt das String-Datum in Java.sql.Date und verwenden Sie eine andere Methode:

preparedStatement.setDate(4,dateDB);
15
Mark

Ich hatte einen ähnlichen Fehler. Es stellte sich heraus, dass ich nur die jar-Version für mysql-connector-Java (mit maven) aktualisieren musste

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-Java</artifactId>
        <version>...</version>
    </dependency>
12

Versuchen Sie, das Datum neu zu formulieren

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

und dann in die Datenbank einfügen . Beachten Sie, dass request.getParameter ("date") im Format 20.11.2013 sein sollte, damit dies funktioniert, oder Sie können einen ähnlichen Weg verwenden, um dies zu erreichen.

3
sumitsabhnani

Wenn jemand einen ähnlichen Fehler für das Entitätsfeld mit dem als @Temporal gekennzeichneten Datentyp hat, bestand die Lösung für mich darin, den Anmerkungswert TemporalType.TIMESTAMP durch TemporalType.TIME zu ersetzen:

@Temporal(TemporalType.TIMESTAMP)
private Date dateField;

sollte so sein:

@Temporal(TemporalType.TIME)
private Date dateField;

Eine andere Möglichkeit, dieses Problem ohne Codeänderungen (zumindest für mich) zu lösen, bestand darin, die Anwendung auf einer höheren Tomcat-Version auszuführen. Ich hoffe, es hilft.

0

Stellen Sie sicher, dass der Datumswert, den Sie in die Tabelle einfügen möchten, genau das Format hat, das in der Datumsspalte Ihrer Tabelle definiert ist. 

 enter image description here

0
Anantha Raju C

Ich weiß, dass dies ein alter Thread ist, aber keine dieser Lösungen hat das Problem für mich gelöst. Was für mich funktionierte, war ein Upgrade des Hibernats auf Version 5.2.10.Final (siehe this SO post ).

Spring Boot und Spring Data JPA 1.5.4.RELEASE und Ruhezustand ausführen 5.2.10.Final.

0
jtcotton63