Bonjour à tous,
Je vous explique mon problème, j'ai une ArrayList qui contient des coordonnées de point et je voudrais la stocker dans une base de données pour la récupérer quand mon application redémarra. J'ai vu sur la doc de java sun, qu'une ArrayList été serializable donc en principe je peu stocker une ArrayList dans un type Blob.
Voilà mon code pour la stocker :
Mon code pour récupérer l'ArrayList contenu dans la base de données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 try { //Statement instruction = null; Class.forName("com.mysql.jdbc.Driver"); connexion = DriverManager.getConnection("jdbc:mysql://127.0.0.1/gpem","root",""); String sql = "INSERT INTO table (ArrayList) VALUES (?)"; PreparedStatement instruction = connexion.prepareStatement(sql); //insertion de l'objet instruction.setObject(1, tabtombe.toArray()); instruction.executeUpdate(); } catch (ClassNotFoundException ex) { JOptionPane.showMessageDialog(null,"Class introuvable : \n"+ex.getMessage()); } catch (SQLException ex) { JOptionPane.showMessageDialog(null,"Connexion impossible : \n"+ex.getMessage()); } finally { try{ if (connexion !=null) connexion.close(); } catch(SQLException ex){ ex.printStackTrace(); } }
Quand je lance mon programme pour récupérer mon ArrayList j'ai ce message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 try { Statement instruction = null; ResultSet res =null; Class.forName("com.mysql.jdbc.Driver"); connexion = DriverManager.getConnection("jdbc:mysql://127.0.0.1/gpem","root",""); instruction = connexion.createStatement(); JOptionPane.showMessageDialog(null,"Connexion à la base OK"); res = instruction.executeQuery("Select ArrayList_concession from tb_tracer_concession where id_tracer_concession = '6'"); res.next(); InputStream stream = res.getBlob("ArrayList_concession").getBinaryStream(); ObjectInputStream objet = new ObjectInputStream(stream); tabtombe=(ArrayList<concession>) objet.readObject(); } catch (IOException ex) { JOptionPane.showMessageDialog(null,"Marche pas : \n"+ex.getMessage()); } catch (ClassNotFoundException ex) { JOptionPane.showMessageDialog(null,"Class introuvable : \n"+ex.getMessage()); } catch (SQLException ex) { JOptionPane.showMessageDialog(null,"Connexion impossible : \n"+ex.getMessage()); } finally { try{ if (connexion !=null) connexion.close(); } catch(SQLException ex){ ex.printStackTrace(); } } }
qui correspond à la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part invalid stream header:5B66696E
Quelqu'un aurait une idée car sa fait une semaine que je suis dessus et avec mon professeur on trouve pas le problème avec l'ArrayList.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ObjectInputStream objet = new ObjectInputStream(stream);
Merci d'avance pour vos réponse.
Cordialement takepaf.
Partager