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);
}
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);
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>
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.
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.
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.