Format de la Date d'Erreur java.sql.SQLException: Invalid type de colonne
Je suis d'affichage de la date en utilisant JSF pattern="dd-MMM-yyyy"
.
Lorsque j'essaie d'insérer/mettre à jour des valeurs de date dans mon oracle DB, je suis
java.sql.SQLException: Invalid column type
parce que mon format de date avant d'insérer ou de mise à jour est dans ce format
Wed Feb 09 00:00:00 AST 2011
Comment puis-je correctement insérer ou de mettre à jour mes valeurs de date Oracle Db et quelle est la meilleure approche pour ce faire?
Mise à jour de 1
Ma db insérer le code.
private void editSchedule(Schedule schedule)
Object[] values = { schedule.getStartDate(),
schedule.getVacationId() };
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = datacon.getConnection();
preparedStatement = prepareStatement(connection, SQL_EDIT, values);
preparedStatement.executeUpdate();
} catch (Exception e) {
logger.info("errro "+e.getMessage());
e.printStackTrace();
} finally {
//TODO: handle exception
close(connection, preparedStatement);
}
}
PreparedStaement partie de code de
public static PreparedStatement prepareStatement
(Connection connection, String sql, Object... values)
throws SQLException
{
PreparedStatement preparedStatement = connection.prepareStatement(sql
);
setValues(preparedStatement, values);
return preparedStatement;
}
public static void setValues(PreparedStatement preparedStatement, Object... values)
throws SQLException
{
for (int i = 0; i < values.length; i++) {
preparedStatement.setObject(i + 1, values[i]);
logger.info("sql "+Arrays.asList(values));
}
}
Vous devez vous connecter pour publier un commentaire.
Il semble que vous essayez de comprendre les données que texte lorsque vous êtes à l'insertion/mise à jour. Ne pas faire usage d'un
java.sql.Date
dans unPreparedStatement
. L'introduction inutile chaîne de conversions est une très mauvaise idée - il rend votre code très fragile, et rend le code plus confusijng: gardez vos données en un type de données approprié aussi longtemps que vous le pouvez.DD-MMM-YYYY
. Je ne suis pas sûr de savoir comment venir mon format de la date a changé deWed Feb 09 00:00:00 AST 2011
Dans mon haricot, j'aifor (Schedule editValues : beanValues) { editValues.setStartDate(selectedRow.getStartDate());
Pour DB code de mise à jour j'ai l'erreur vient de cette lignepreparedStatement = prepareStatement(connection, SQL_EDIT, values);
où les valeurs est déclarée commeObject[] values
setObject
au lieu de définir explicitement le paramètre à l'aide desetDate
? Je serais au moins essayer que.schedule.getStartDate()
? Par exemple, si c'est une java.util.Date, vous voudrez peut-être créer un java.sql.Date de la place.setObject
peut prendre tous les objets, indépendamment de la date ou de la Ficelle!schedule.getStartDate()
est dejava.util.Date
setDate
. Comme je l'ai dit, vous pouvez essayer de créer unejava.sql.Date
valeur trop, enveloppant lesjava.util.Date
.java.sql.Date
pour le SQL - vous pouvez utiliserjava.util.Date
pour le reste, mais de créer une copie comme unjava.sql.Date
lorsque vous ne l'insérez.util.Date
àsql.Date
parjava.sql.Date sqlStartDate = new java.sql.Date(schedule.getStartDate().getTime());
Ce que j'ai pu obtenir la date en sql.Date et j'ai pu passer comme setObject dans preparedStatement méthode. Merci beaucoup pour votre temps et vos réponses. Apprécié.JDBC ne comprend
java.sql.Date
,java.sql.Time
etjava.sql.Timestamp
que SQL types de colonnes, pasjava.util.Date
.Vous avez besoin de changer
par
Puis il va travailler. Il suffit de garder à l'aide de
java.util.Date
dans votre modèle. JSF à son tour de ne pas comprendrejava.sql.Date
.