2017-10-13 6 views
1

J'ai ce code pour construire une table:Comment formater la variable Date lors de l'insertion dans une table de base de données en utilisant java

CREATE TABLE Course 
(
    CustomerName varchar(30) NOT NULL, Title varchar (30) NOT NULL, 
    Type varchar(30) NOT NULL, Instructor varchar(30) NOT NULL, StartDate Date NOT NULL, EndDate Date NOT NULL, 
    Price float NOT NULL 
); 

Lorsque je tente d'insérer quelque chose dans la table du cours, la date indique qu'il est le mauvais format. Il dit que la date ne peut pas contenir d'entier ou de chaîne. Comment puis-je entrer la date pour qu'elle l'exclue? Voici toutes les façons que j'ai essayé:

INSERT INTO Course(CustomerName, Title, Type, Instructor, StartDate,EndDate,Price) VALUES ('Hary','Intro to Stupidity', 'Programming','Davis', 2017/11/12, 2017/04/03, 124.00); 

INSERT INTO Course(CustomerName, Title, Type, Instructor, StartDate,EndDate,Price) VALUES ('Hary','Intro to Stupidity', 'Programming','Davis', 2017-11-12, 2017-04-03, 124.00); 

INSERT INTO Course(CustomerName, Title, Type, Instructor, StartDate,EndDate,Price) VALUES ('Hary','Intro to Stupidity', 'Programming','Davis', 2017.11.12, 2017.04.03, 124.00); 

INSERT INTO Course(CustomerName, Title, Type, Instructor, StartDate,EndDate,Price) VALUES ('Hary','Intro to Stupidity', 'Programming','Davis', (2017/11/12), (2017/04/03), 124.00); 

Si quelqu'un pouvait aider ce serait génial!

+3

Réponse courte, ne pas. Utilisez plutôt la capacité 'PreapredStatement' de gérer directement les types de date/heure et laissez le pilote sous-jacent y faire face - Voir [Using Prepared Statements] (https://docs.oracle.com/javase/tutorial/jdbc/basics/ prepare.html) pour plus de détails – MadProgrammer

+0

pouvez-vous oublier d'utiliser "" pour entourer la date? – herokingsley

+0

Quelle base de données utilisez-vous? Oracle, Postgre, Mysql ... etc. Si vous utilisez Oracle, regardez ce lien: http://psoug.org/definition/to_date.htm – esprittn

Répondre

1

Les bases de données ne stockent pas de valeurs date-heure avec un "format".

Mais vous pouvez entrer des valeurs date-heure représentées comme des chaînes qui ont un format. Passez une chaîne au format approprié attendu par SQL (AAAA-MM-JJ) tel que "2017-11-12" en utilisant des guillemets doubles.

Ou, mieux encore, passez des objets date-heure pour les valeurs entrant dans les colonnes date-heure.

LocalDate localDate = LocalDate.of(2017 , Month.NOVEMBER , 12) ; 

Utilisez un PreparedStatement pour éviter les risques SQL de sécurité d'injection.

myPreparedStatement.setObject(… , localDate) ; 

Récupérer en tant qu'objet date-heure.

LocalDate localDate = myResultSet.getObject(… , LocalDate.class) ; 

Lisez les tutoriels Oracle et recherchez Stack Overflow. Ces sujets ont déjà été abordés plusieurs fois. Conseil: utilisez les minuscules dans les noms de colonnes pour une portabilité maximale dans les bases de données.

+0

Comme une alternative à 'setObject', certains programmeurs trouvent' setDate' et 'setTimestamp' pour être légèrement plus facile à coder. –

+1

@BrianPendleton Les méthodes setDate et setTimestamp prennent des arguments en utilisant des classes mal conçues, gênantes et désormais héritées. Évite-les. Sun, Oracle et la communauté JCP ont tous abandonné ces classes, et vous aussi. Ils sont maintenant supplantés par les classes java.time. –

+0

Je ne conteste pas que les nouvelles classes de date/heure JDK sont agréables. Je notais juste que 'setObject' et' getObject' sont des interfaces JDBC plutôt génériques, pas tout à fait aussi "amicales" que les méthodes setDate et setTimestamp. Vous avez raison, la communauté Java principale est passée à un nouvel ensemble de classes date/heure. Cependant, je ne suis pas sûr que cet enthousiasme se soit encore traduit dans la communauté JDBC. –