Voila j'ai une classe Gestion, avec dedans deux ArrayList qui contiennent des objets, j'aimerais faire persister ces arraylist à travers une base de données MySql
Donc j'ai ma classe Gestion :
Et la classe qui permet de sérialiser et d'envoyer vers la bdd :
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 package Gestion; import java.util.*; import java.io.Serializable; public class Gestion implements Serializable{ //Les Réservations private ArrayList lesReservations= new ArrayList(); public void addReservation(String code, GregorianCalendar dateDemande, int dureeOccupation, GregorianCalendar dateDebut, Personne unePersonne, int nbPersonnes, Emplacement unEmplacement){ Reservation r = new Reservation (code, dateDemande, dureeOccupation, dateDebut, unePersonne, nbPersonnes, unEmplacement ); lesReservations.add(r); } public ArrayList getLesReservations() { return this.lesReservations; } public Reservation getReservation(String numero){ Reservation res = null; for (int i = 0; i<lesReservations.size();i++){ if ( ((Reservation)lesReservations.get(i)).getCode().equals(numero)){ res = ((Reservation)lesReservations.get(i));}} return res; } public ArrayList retrouveReserveClient(String codeClient){ ArrayList sesReservations = new ArrayList(); for (int i = 0; i<lesReservations.size();i++) { if (((Reservation)lesReservations.get(i)).getUnePersonne().getCodeClient().equals(codeClient)) { sesReservations.add(lesReservations.get(i)); }} return sesReservations; } public int nombreReservations(){ return lesReservations.size(); } public float surfaceTotale(){ float resultat = 0; for (int i = 0; i < lesEmplacements.size(); i++){ resultat = resultat + ((Emplacement)lesEmplacements.get(i)).getSurface(); } return resultat; } //Les Emplacements private ArrayList lesEmplacements = new ArrayList(); public ArrayList getLesEmplacements(){ return this.lesEmplacements;} public Emplacement getEmplacement(String numero){ Emplacement emp = null; for (int i = 0; i<lesEmplacements.size();i++){ if ( ((Emplacement)lesEmplacements.get(i)).getNumero().equals(numero)){ emp = ((Emplacement)lesEmplacements.get(i));}} return emp; } public void addRempli(String numero, boolean ombrage, int longueur, int largeur, int taxePersonne,String libelle, int nbChambres, int nbPieces, int presenceWc, boolean terrasse){ Rempli r = new Rempli (numero, ombrage, longueur, largeur, taxePersonne, libelle, nbChambres, nbPieces, presenceWc, terrasse); lesEmplacements.add(r);} public void addVide(String numero, boolean ombrage, int longueur, int largeur, int taxePersonne, boolean electricite){ Vide v = new Vide (numero, ombrage, longueur, largeur, taxePersonne, electricite); lesEmplacements.add(v);} public ArrayList retrouveReserveEmp(String codeEmp){ ArrayList sesReservations = new ArrayList(); for (int i = 0; i<lesReservations.size();i++) { if (((Reservation)lesReservations.get(i)).getUnEmplacement().getNumero().equals(codeEmp)) { sesReservations.add(lesReservations.get(i)); } } return sesReservations; } //Calculer les dates //Ressortir les dates disponibles pour un emplacement donné // public boolean emplacementsDispo(GregorianCalendar dateDepart){ boolean b; b = true; for (int i = 0; i < lesReservations.size();i++){ if( ((Reservation)lesReservations.get(i)).getDateDebut().before(dateDepart) && ((Reservation)lesReservations.get(i)).calculeDateFin().after(dateDepart)){ b = false; }} return b; } }
Cependant quand je lance sous eclipse ca me met :
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121 package Gestion; /**SQL to create MySQL Table For Object Storing**/ /*CREATE TABLE javaobjects ( objectid INT AUTO_INCREMENT, object_name varchar(100), object_value BLOB, primary key (objectid)); */ import java.io.ByteArrayInputStream; import java.io.ObjectInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.Date; import java.util.List; public class SerializeJavaObjects_MySQL { static final String SQL_TO_WRITE_OBJECT = "INSERT INTO JAVAOBJECTS(OBJECT_NAME, OBJECT_VALUE) VALUES (?, ?)"; static final String SQL_TO_READ_OBJECT = "SELECT OBJECT_VALUE FROM JAVAOBJECTS WHERE OBJECTID = ?"; static String driver = "com.mysql.jdbc.Driver"; static String url = "jdbc:mysql://localhost/Ecamping"; static String username = "client"; static String password = "client"; /** * This class will create and return a database connection. */ public static Connection getConnection() throws Exception { Class.forName(driver); Connection conn = DriverManager.getConnection(url, username, password); return conn; } /** * This method will write a java object * to the database * Parameters: connection object and object to be serialized */ public static long writeJavaObject(Connection conn, Object object) throws Exception { String className = object.getClass().getName(); PreparedStatement pstmt = conn.prepareStatement(SQL_TO_WRITE_OBJECT); pstmt.setString(1, className); pstmt.setObject(2, object); pstmt.executeUpdate(); ResultSet rs = pstmt.getGeneratedKeys(); int id = -1; if (rs.next()) { id = rs.getInt(1); } rs.close(); pstmt.close(); System.out.println("Serialization Successful."+ "Serialized Class: "+ className); return id; } /** * This class will de-serialize a java object from the database */ public static Object readJavaObject(Connection conn, long id) throws Exception { PreparedStatement pstmt = conn.prepareStatement(SQL_TO_READ_OBJECT); pstmt.setLong(1, id); ResultSet rs = pstmt.executeQuery(); rs.next(); byte[] buf = rs.getBytes("object_value"); ObjectInputStream objectIn = null; if (buf != null) objectIn = new ObjectInputStream(new ByteArrayInputStream(buf)); Object object = objectIn.readObject(); String className = object.getClass().getName(); rs.close(); pstmt.close(); System.out.println("Deserialization Successful."+ "\nDeserialized Class: "+ className); return object; } /** * Testing the serialization and deserialization feature. */ public static void main(String args[]) throws Exception { Connection conn = null; try { /**Creating DB Connection**/ conn = getConnection(); conn.setAutoCommit(false); /**Creating Test object to Serialize**/ Gestion obj = new Gestion(); /** * Serializing the object and getting the database id, * which is nothing but an autogenerated key */ long objectID = writeJavaObject(conn, obj); conn.commit(); System.out.println("Serialized object ID" + objectID); /** * Reading the object from database. * This object is just serialized into database above. */ Gestion objFromDatabase = (Gestion) readJavaObject( conn, objectID); System.out.println("After Deserialization:"); System.out.println("Object Value: " + objFromDatabase); System.out.println("Class: " + objFromDatabase.getClass().getName()); } catch (Exception e) { e.printStackTrace(); } finally { /**Closing the database connection**/ conn.close(); } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement(). at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) at com.mysql.jdbc.StatementImpl.getGeneratedKeys(StatementImpl.java:1856) at Gestion.SerializeJavaObjects_MySQL.writeJavaObject(SerializeJavaObjects_MySQL.java:51) at Gestion.SerializeJavaObjects_MySQL.main(SerializeJavaObjects_MySQL.java:101)
Partager