Exception Access après insertion
Bonjour à tous,
J'ai une erreur sur une de mes méthodes que je ne comprend pas. Le principe de la méthode est très simple. J'insère chaque ligne d'un fichier texte (1.000.000 de lignes) (après un petit traitement) dans une table de base de donnée Access.
Voici l'exception que me retourne la machine virtuelle après avoir inséré dans ma base de donnée environ 150.000 lignes. J'ai pensé qu'Access perdait peut-être les pédales avec l'insertion massive de lignes mais... si c'est le cas je ne sais pas comment corriger mes méthodes.
Code:
1 2 3 4 5 6 7 8 9 10
|
java.sql.SQLException: [Microsoft][Pilote ODBC Microsoft Access] Impossible d'ouvrir plus de tables.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(Unknown Source)
at actionbdd.ConnectionBDD.executeRequeteInsert(ConnectionBDD.java:151)
at actionbdd.ImportationTexte.importAccess(ImportationTexte.java:156)
at fr.lesmureaux.mairie.dsi.Main.main(Main.java:128) |
La portion du main incriminée :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
// INSERTION DU FICHIER DANS LA BASE DE DONNEES
System.out.println("3- INSERTION DU FICHIER DANS LA BASE DE DONNEES");
try {
System.out.println(ift.getCheminInsertion());
System.out.println(ift.importAccess(nomNewTable,
"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="
+ ift.getCheminInsertion().replace('\\', '/')));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} |
La méthode ImportAccess :
Code:
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
|
/**
* Méthode qui importe le fichier dans la table d'une base de donnée.
* @param nomTable nom de la table où l'on importe le fichier
* @param chaineBase chaîne de connection à la base de donnée
* @return Retourne le nombre de tuple importé dans la table
* @throws FileNotFoundException lancée si le fichier précisé dans
* l'objet ImportationTexte n'existe pas
* @throws IOException lancée en cas d'erreur d'I/O
* @throws ClassNotFoundException lancée ...
* @throws SQLException en cas d'erreur de requête
*/
public int importAccess(String nomTable, String chaineBase)
throws FileNotFoundException, IOException, ClassNotFoundException,
SQLException {
FileReader fr = new FileReader(this.cheminMiseEnForme);
BufferedReader br = new BufferedReader(fr);
String s = null;
StringTokenizer tokenizer = null;
StringBuffer req = new StringBuffer("");
ConnectionBDD connection = new ConnectionBDD(chaineBase);
int nb = 0;
Connection connect = connection.connectBaseAccess();
while (br.ready()) {
s = br.readLine();
tokenizer = new StringTokenizer(s, "\t");
req = new StringBuffer("Insert into ");
req.append(nomTable);
req.append(" values(");
while (tokenizer.hasMoreTokens()) {
req.append("'");
req.append(tokenizer.nextToken());
req.append("', ");
}
StringBuffer reqFin = new StringBuffer(req.substring(0, req
.length() - 2));
reqFin.append(");");
nb = nb + 1;
connection.executeRequeteInsert(connect, reqFin.toString());
connect.commit();
}
connect.close();
br.close();
fr.close();
return nb;
} |
La méthode executeRequeteInsert :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
/**
* Méthode pour exécuter un INSERT sur une base de donnée précisée en
* paramètre.
* @throws SQLException lancée s'il y a un problème de syntaxe avec la
* requête
* @param requete variable contenant la requête INSERT à exécuter
* @param connection variable qui gère la connection à la BDD
* @return Renvoi le nombre de tuple inséré par la requête
*/
public int executeRequeteInsert(Connection connection, String requete)
throws SQLException {
Statement stmt = null;
int rs = 0;
stmt = connection.createStatement();
System.out.println("req = " + requete);
rs = stmt.executeUpdate(requete);
return 1;
} |
Merci pour votre aide,