Chaîne en java.sql.Date
Je me rends compte de ce qui a été demandé à beaucoup. Je n'ai effectivement regarder. J'ai passé des heures à regarder autour et essayer de comprendre cela. Je suis censé faire un programme qui stocke ce qui équivaut à une liste de rendez-vous dans une base de données, avec une description, la date, l'heure de début et l'heure de fin. Il a de prendre une entrée de l'utilisateur à ajouter ou annuler des rendez-vous, pour autant que je sais que cela signifie que j'ai besoin de convertir une chaîne de caractères à une date.
Ce sont mes importations:
importer java.io.Fichier;
importer java.io.IOException;
importer java.sql.Connexion;
importer java.sql.Date;
importer java.sql.PreparedStatement;
importer java.sql.ResultSet;
importer java.sql.ResultSetMetaData;
importer java.sql.SQLException;
importer java.sql.Temps;
importer java.texte.DateFormat;
importer java.texte.ParseException;
importer java.texte.SimpleDateFormat;
importer java.util.ArrayList;
importer java.util.Scanner;
Comme vous pouvez le voir, pas de java.util.Date là. Ici, c'est le peu où j'obtiens le message d'erreur:
private static java.sql.Date getDay()
{
Scanner in = new Scanner(System.in);
String input;
Date apptDay = null;
DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
java.sql.Date sqlDate;
System.out.println("\nPlease enter the date of the appointment, format: yyyy/mm/dd");
while(apptDay == null)
{
try
{
input = in.next();
apptDay = (Date) df.parse(input);
}
catch(ParseException e)
{
System.out.println("Please enter a valid date! Format is yyyy/mm/dd");
}
}
sqlDate = new Date(apptDay.getTime());
return sqlDate;
}
J'ai ajouté java.sql.Dates et couché sur un tas en essayant de le faire fonctionner, mais c'est encore de me donner cette:
Exception in thread "main" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
at Calendar.getDay(Calendar.java:47)
Toutes les idées sur ce que je fais mal ou de façon de faire ce travail serait très apprécié.
Edit: j'ai pensé que peut-être il serait utile si j'ai ajouté le code qui est à l'appel de cette sorte peut-être qu'il sera plus claire de la façon dont je suis en train de l'utiliser, voici donc la addAppointment() la méthode, de sorte que vous pouvez voir où getDay() est appelée et où il va.
public static void addAppointment() throws SQLException
{
//get the info
String desc = getDesc();
java.sql.Date apptDay = getDay();
Time[] times = getTime();
Time startTime = times[0];
Time endTime = times[1];
int key;
Connection conn = SimpleDataSource.getConnection(); //connect to the database
try
{
PreparedStatement max = conn.prepareStatement("SELECT MAX(ID) FROM Calendar");
ResultSet result = max.executeQuery();
key = result.getInt("ID") + 1;
PreparedStatement stat = conn.prepareStatement(
"INSERT INTO Calendar " +
"VALUES (?, ?, ?, ?, ?)");
stat.setInt(1, key);
stat.setString(2, desc);
stat.setDate(3, apptDay);
stat.setTime(4, startTime);
stat.setTime(5, endTime);
stat.execute();
System.out.println("\nAppointment added!\n");
}
finally
{
conn.close(); //finished with the database
}
}
source d'informationauteur Tajha
Vous devez vous connecter pour publier un commentaire.
Il serait beaucoup plus simple de changer le format d'entrée de
yyyy-MM-dd
et l'utilisationjava.sql.Date.valueOf(String date)
méthode qui convertit une chaîne de caractères dans le format ci-dessus de java.sql.Date de valeur directement.Cela devrait fonctionner:
La déclaration suivante a provoqué l'erreur:
En effet, le type de la valeur de retour de
java.text.DateFormat.parse(String)
estjava.util.Date
qui est incomparable avecjava.sql.Date
.Dans votre situation, le moyen le plus facile peut-être à l'aide de
java.util.Date
au lieu dejava.sql.Date
.Une autre remarque: votre nom de classe
Calendar
est doublon avecjava.util.Calendar
. Et il n'est pas un bon style de codage à utiliser les noms de classe qui sont déjà utilisés par la bibliothèque standard.java.sql.Date
etjava.util.Date
sont deux Classes différentes. Vous avez besoin de convertir le sql date en util date qui est compatible avec le Calendrier.et vice-versa
Essayer ci-dessous la méthode -
Et de
main()
méthode, appelez cette méthode -