2010-06-02 5 views
2

J'utilisais le template spring jdbc pour insérer des données dans la base de données et j'obtenais cette erreur.Spring Jdbc Template + MySQL = TransientDataAccessResourceException: Argument invalide Valeur: Java.io.notSerializationException

Voici mon code:

JdbcTemplate insert = new JdbcTemplate(dataSource); 
     for(ResultType result : response.getResultSet().getResult()) 
     { 
      Object[] args = new Object[] {result.getAddress(), result.getCity(), result.getState(), result.getPhone(), result.getLatitude(), result.getLongitude(),result.getRating().getAverageRating(), result.getRating().getAverageRating(), result.getRating().getTotalRatings(), result.getRating().getTotalReviews(), result.getRating().getLastReviewDate(), result.getRating().getLastReviewIntro(), result.getDistance(), result.getUrl(), result.getClickUrl(), result.getBusinessUrl(), result.getBusinessClickUrl()}; 
      insert.update("INSERT INTO data.carwashes (address, city, state, phone, lat, lng, rating, average_rating, total_ratings, total reviews, last_review_date, last_review_intro, distance, url, click_url, business_url, business_click_url, category_id, zipcode_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,96925724,78701)", args); 
     } 

assez long code .. mais, au fond, il obtient la valeur d'un objet et il colle à un tableau et passé ce tableau pour insérer la méthode du modèle jdbc.

Toute aide sera appréciée.

+0

http://forum.springsource.org/showthread.php?t=53267 – stacker

Répondre

4

Je pense que l'un des éléments dans votre tableau de arg est d'un type non reconnu par JdbcTemplate, (à savoir ce n'est pas un String, un Date, etc.), et il est donc d'appeler setObject() sur la déclaration. Le pilote essaiera alors de sérialiser l'argument dans un binaire, découvre qu'il n'est pas sérialisable et lève l'exception.

Assurez-vous que les arguments dans le tableau sont tous ce que vous pensez qu'ils devraient être, par exemple. ils ne devraient pas être des instances de vos propres classes, mais devraient être des types Java standard.

+0

+1: Je le crois aussi. Btw: Insérer des données dans une boucle for n'est pas très efficace. Vous devriez considérer la méthode 'batchUpdate (sql, pss)' de JdbcTemplate. – Espen

+0

Merci Espen. Je ferai ça. C'était plus comme un essai pour voir si toutes les pièces s'emboîtent. Je vais essayer ces solutions et voir. –