Quelqu'un peut-il m'aider avec un exemple de code JSP pour stocker la date dans une base de données MySQL via JDBC? Lorsque j'essaie d'exécuter le code indiqué ci-dessous, j'obtiens l'exception suivante:
com.mysql.jdbc.MysqlDataTruncation: Troncature des données: valeur date/heure incorrecte: '' pour la colonne 'date' à la ligne 1
Comment surmonter ce problème? Voici mon 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);
}
Pour définir la date sur l'instruction préparée, vous devez modifier le type de valeur:
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());
convertissez maintenant String date en Java.sql.Date et utilisez une autre méthode:
preparedStatement.setDate(4,dateDB);
J'ai eu une erreur similaire. Il s'avère que je devais juste mettre à jour la version de jar pour mysql-connector-Java (en utilisant maven)
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-Java</artifactId>
<version>...</version>
</dependency>
Essayez de reformater la date
String date = new SimpleDateFormat("yyyy-MM-dd")
.format(new Date(request.getParameter("date")));
et ensuite insérer dans la base de données . Notez que request.getParameter ("date") doit être au format 11/20/2013 pour que cela fonctionne ou vous pouvez utiliser un moyen similaire pour le réaliser.
Si quelqu'un avait une erreur similaire pour le champ d'entité avec le type de données annoté avec @Temporal
, la solution pour moi était de remplacer la valeur d'annotation TemporalType.TIMESTAMP
par TemporalType.TIME
:
@Temporal(TemporalType.TIMESTAMP)
private Date dateField;
devrait être comme ça:
@Temporal(TemporalType.TIME)
private Date dateField;
Un autre moyen de résoudre ce problème sans aucune modification de code (du moins pour moi) était d'exécuter l'application sur une version plus récente de Tomcat. J'espère que cela vous aidera.
Je sais que c'est un vieux fil, mais aucune de ces solutions n'a résolu le problème pour moi. Ce qui a fonctionné pour moi a été de mettre à niveau hibernate vers la version 5.2.10.Final (voir this SO post ).
Exécution de Spring Boot et Spring Data JPA 1.5.4.RELEASE et hibernate 5.2.10.Final.