web-dev-qa-db-fra.com

Troncature des données: valeur date/heure incorrecte: ''

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

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);
15
Mark

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>
12
Kimball Robinson

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.

3
sumitsabhnani

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.

0
Serhii Maksymchuk

Assurez-vous que la valeur Date que vous essayez d'insérer dans le tableau est exactement au format défini dans la colonne de date de votre tableau. 

 enter image description here

0
Anantha Raju C

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.

0
jtcotton63