Bonjour tout le monde, je dévellope actuellement une application client/serveur en Java dans le cadre d'un projet de seconde année de DUT GTR, pour les besoins de cette application j'utilise (entre autre) une base de données en PostGresql; j'ai créé un programme Java permettant la configuration de la base de données ( dans mon cas c'est pour gérer les abscences des étudiants sur un PDA) c'est à dire d'ajouter des étudiants selon leur année, leur nom, leur prénom... et mon tuteur de projet m'a demandé de réaliser une importation et exportation à partir d'un fichier texte. En postgresql ce n'est pas trop un problème mais en Java ça bug quelque peu et je ne sais plus trop quoi faire, c'est pourquoi je requiert votre aide (n'ayant pu trouver réponse à mes questions sur le net et sur le site).
Voici mon code actuel :
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
| protected void doImportCommand() {
// "COPY table_destination FROM '/tmp/un_fichier';"
// DELETE FROM table WHERE id = 1;
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
JFileChooser chooser = new JFileChooser();
chooser.setApproveButtonText("Importer");
chooser.setApproveButtonToolTipText("Importer");
chooser.setDialogTitle("Importer...");
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
int returnVal = chooser.showOpenDialog(content);
if (returnVal == JFileChooser.APPROVE_OPTION) {
char[] data;
String filename = chooser.getSelectedFile().getName();
File directory = chooser.getCurrentDirectory();
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
File f = new File(directory, filename);
try {
FileReader fin = new FileReader(f);
int filesize = (int) f.length();
List val = new ArrayList();
data = new char[filesize];
fin.read(data, 0, filesize);
String tmp = "";
int deb = 0;
int cfin = 0;
for (int i = deb; i < filesize; i++) {
if (data[i] == ';') {
cfin = i;
for (int j = deb; j < cfin; j++)
tmp += data[j];
val.add(tmp);
tmp = "";
deb = cfin;
}
}
val.add(";");
val.add(""+'\n');
val.add("\\.");
Iterator st = val.iterator();
ReqSQL req=new ReqSQL("COPY gestion_etudiant.etudiant FROM stdin with delimiter ';'",1);
while (st.hasNext()) {
System.out.print(st.next());
}
fin.close();
} catch (FileNotFoundException exc) {
statusInfo.setText(" Fichier non trouvé : " + filename);
} catch (IOException exc) {
statusInfo.setText(" IOException: " + filename);
}
statusInfo.setText(" " + filename + " chargé...");
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
} |
Je passe par l'intermédiaire d'un traitement de fichier texte qui me ressort en System.out.print() les valeurs à ajouter à ma table, j'aimerai donc ensuite utiliser la requête :
COPY gestion_etudiant.etudiant FROM stdin with delimiter ';';
sachant que mon fichier de mise à jour de la table (sur la sorti système) est le suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 222;1;12;B;Jean-Louis;Boby;
333;1;25;A;Lou;Bou;
444;1;25;A;Lou;Bou;
555;1;12;C;Louis;Boule;
666;2;15;A;Dupont;Benjamin;
777;1;22;A;Binoucle;Joelle;
888;1;22;B;Marcel;Constant;
999;1;22;C;Phillipart;Lydie;
123;1;24;C;Micky;Moneyron;
124;2;22;A;Ok;Computer;
125;2;25;B;Yo;By;
126;2;16;C;NaNa;Ouai;
127;2;24;C;vOYON;SERIEU;
\. |
Si vous pouviez m'aider à trouver une réponse à mon problème assez rapidement si possible étant donné que je bosse dessus tous les jours des vacances et que j'aimerais pouvoir finir dans les temps impartis...
Merci d'avance, cordialement,
Beni.
ps : le code de ma classe ReqSql est la suivante :
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
|
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ReqSQL {
private Connection connexion;
private Statement stmt = null;
private static List result;
public ReqSQL(String requete, int i) {
result = new ArrayList();
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
System.err.println("Pilote d'accès postgresql introuvable ("
+ e.toString() + ")");
}
ouvreConnexion("jdbc:postgresql://localhost/Etudiants", "serveur",
"progtr00");
if(i==1){
resulReqEtudiant(requete);
Config.result = getTabReq();
}else if (i==2){
reqEtudiant(requete);
}
fermeConnexion();
}
public void ouvreConnexion(String url, String user, String password) {
try {
connexion = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
System.out.println("Exception: ouverture (" + e.toString() + ")");
}
}
public void fermeConnexion() {
try {
connexion.close();
} catch (SQLException e) {
System.out.println("Exception: fermeture (" + e.toString() + ")");
}
}
public void reqEtudiant(String req){
try {
stmt = connexion.createStatement();
} catch (SQLException e) {
}
try {
stmt.executeUpdate(req);
} catch (SQLException e) {
System.err.println("erreur exécution requête SQL " + e.toString());
System.exit(1);
}
}
public void resulReqEtudiant(String req) {
result = new ArrayList();
ResultSet rs;
try {
stmt = connexion.createStatement();
} catch (SQLException e) {
}
try {
rs = stmt.executeQuery(req);
while (rs.next()) {
result.add("@id@");
result.add(rs.getString("id"));
result.add("@annnee@");
result.add(rs.getString("annee"));
result.add("@sous_groupe@");
result.add(rs.getString("sous_groupe"));
result.add("@groupe@");
result.add(rs.getString("groupe"));
result.add("@nom@");
result.add(rs.getString("nom"));
result.add("@prenom@");
result.add(rs.getString("prenom"));
}
stmt.close();
} catch (SQLException e) {
System.err.println("erreur exécution requête SQL " + e.toString());
System.exit(1);
}
}
public int tailleReq(List result) {
Iterator it = result.iterator();
int cpt = 0;
while (it.hasNext() && it.next() != null) {
cpt++;
}
return cpt;
}
public String[] getTabReq() {
String[] resultat = new String[tailleReq(result)];
int cpt = 0;
Iterator it = result.iterator();
while (it.hasNext()) {
resultat[cpt] = (String) it.next();
cpt++;
}
return resultat;
}
} |
et le message d'erreur que j'obtien est le suivant :
1 2
|
erreur exécution requête SQL org.postgresql.util.PSQLException: Unknown Response Type G |
Partager