IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

JDBC verifier le contenu d'un resultset


Sujet :

JDBC Java

  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 19
    Par défaut JDBC verifier le contenu d'un resultset
    Salut à tous

    J'ai écrit un programme en java (voir le code ci-en bas) qui me permet de pomper une table dans une base de donnée 4D 2004_3 vers une base de donnée Mysql

    Ce programme marche! mais pas à tous les coups dans 50% des cas je reçoit le message

    java.sql.SQLException: com.fourd.jdbc.StatementImpl::executeSELECTCommand: Failed to execute SELECT command.
    Network problem - Server unreachable

    or donc puisque il marche une fois sur deux, ce n'est pas un problème de code en java, ce n'est pas un problème de configuration de la base, ce n'est pas un problème de reseau vu que les deux machines sont côte à côte....donc c'est quoi le problème??

    Pour y remédier, je vousdrais faire truc du genre:

    while ( ! ResultSet rs4 = pstmt.executeQuery() );

    grosso modo une boucle qui effectue la requette jusque à ce qu'elle réussisse.
    En PHP je sais que je peux tester si mysql_query retourne false mais en java il semble qu'il faut jouer avec les throws? non?

    quelque un peut il m'indiquer un petit tutoriel sur la gestion des erreurs "catch"" try" etc...sauf si il y a plus simple.

    Merci à vous et voici le code si jamais

    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
     
     
    // ****************************************** 
    // Code exemple test4Dconn.java 
    // par Bin Kobayashi 
    // ****************************************** 
     
    import java.sql.*; 
    import java.util.Properties; 
    import java.text.Format;
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    import java.util.Date;
    import java.sql.Statement;
    import java.text.SimpleDateFormat;
    import java.io.*;
    import java.util.regex.Pattern;
    import java.util.regex.Matcher;
     
     
    public class evenements
    { 
        public static void main(String[] argv) 
        { 
    	try 
    	{ 
     
    	    // préparation de la date
    	    java.text.SimpleDateFormat formatermy = new java.text.SimpleDateFormat("yyyy-MM-dd");
    	    java.text.SimpleDateFormat formater4d = new java.text.SimpleDateFormat("dd/MM/yyyy");
    	    GregorianCalendar datedebut = new java.util.GregorianCalendar();
    	    datedebut.ADD(Calendar.DAY_OF_YEAR, -30); 
    	    String startdatemy= formatermy.format(datedebut.getTime());
    	    String startdate4d= formater4d.format(datedebut.getTime());
     
     
    	    //connection à 4D
        	    Properties props = new Properties(); 
        	    props.setProperty("user",""); 
        	    props.setProperty("password",""); 
        	    Class.forName("com.fourd.jdbc.DriverImpl"); 
        	    Driver driver = DriverManager.getDriver("jdbc:4d:127.0.0.1"); 
        	    Connection conn4 = driver.connect("jdbc:4d:192.168.xxxx:xxxx", props);         
     
    	    // Création du fichier de sortie
    	    FileOutputStream out;
    	    PrintStream p;
    	    out = new FileOutputStream("evenements.sql");
    	    p = new PrintStream( out );
     
     
    	    //Préparation de la requette sur 4D
    	    PreparedStatement pstmt = conn4.prepareStatement("select Nr_evenement,personnel,Nr_equipement,date_evenement,code_evenement,magasin from Atelier_evenements where date_evenement>?");
     
    	    //fromater la date de la requette
    	    String aDateString = startdate4d;
    	    SimpleDateFormat aFormatter = new SimpleDateFormat("dd/MM/yyyy");
    	    Date aDate = aFormatter.parse(aDateString);   
    	    pstmt.setDate(1,new java.sql.Date(aDate.getTime()));    
     
    	    // executer la requette 4D
    	    ResultSet rs4 = pstmt.executeQuery();      
     
    	    // Initialisation des chaines
    	    String s1, s2,s3,s4,s5,s6,s7,s8,s9;
     
    	    // enrichissement du ficher de sortie
    	    p.println ("/*Mysql input file:evenements*/");			                          
    	    p.println ("delete from 4D_evenements where date_evenement>'"+startdatemy+"';" );
    	    p.println("insert into 4D_evenements value ");
     
    	    BOOLEAN first=true;
    	    while(rs4.next()) 
    	    { 
     
    		s1 = rs4.getString("Nr_equipement"); 
    		s2 = rs4.getString("date_evenement"); 
    		s3 = rs4.getString("code_evenement");
    		s4 = rs4.getString("personnel"); 
    		s5 = rs4.getString("magasin"); 
    		s6 = rs4.getString("Nr_evenement"); 
     
    		// verifications sur les chaines
    		//IF (s6!=NULL) IF ( ! s6.matches("(\\d{4})-(\\d{2})-(\\d{2})"))   s6="null";
    		//s2= s2.replaceAll("\\'","\\\\'");    
    		//s1= s1.replaceAll(" ","_");
     
    		//ajouter la virgule
    		IF ( first==false) 
    		{
    		    p.println(",");
    		}
    		else
    		{
    		    first=false;
    		}
     
    		p.println ("('"+s1+"','"+s2+ "','"+s3+"','"+s4+"','"+s5+"','"+s6+"')");
     
    	    }
     
    	    p.println (";");    
    	    conn4.close(); 
    	    p.close();
     
    	} catch (Exception e) {System.out.println(e);}
        } 
    }

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    pourtant selon le message ce serait un problème réseau. Il est dit clairement que le serveur est inaccessible
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éprouvé
    Avatar de flo.87
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 77
    Par défaut
    Si tu veux un tutoriel sur la gestion des exceptions, tu peux regarder celui de Sun : http://java.sun.com/docs/books/tutor...ons/index.html

    Même si tu as résolu ce problème autrement, tu risques d'avoir tôt ou tard besoin des exceptions.

  4. #4
    Membre émérite
    Avatar de kmdkaci
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 560
    Par défaut JDBC verifier le contenu d'un resultset
    Salut,
    Il indique bien que c'est un problème réseau, même s'il y a une multitude de problèmes réseau.
    Le fait que tes postes sont cote à cote, n'exclue pas un problème réseau, car ça peut venir de ton système, de tes cartes réseaux...etc

    Sinon, pour le try/catch tu peux lors de la connexion, et tu sauras si tu es bien connecté ou pas.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     	    props.setProperty("user",""); 
        	    props.setProperty("password","");
    c'est volontaire le nom de l'utilisateur et le mot de passe vide ?

    ---
    Farid

  6. #6
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 19
    Par défaut
    oui l n'y en a pas sur notre base de donnée elle est dans un VPN, mais il faudra que l'on en met un

    Si vous regardez bien l'erreur, elle se produit lors du "select" et pas lors de la connetion.

    La connection peut-elle "tomber" entre temps?

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Par défaut
    Je suppose qu'elle peut tomber entre temps, de temps en temps, mais pas systematiquement...
    est ce que tu peux tester avec un executeQuery directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    System.out.println("Setting up connection to DataBase:");
    System.out.println("DataBase Product Name    = " + dbConnection.getMetaData().getDatabaseProductName());
    System.out.println("DataBase Product Version = " + dbConnection.getMetaData().getDatabaseProductVersion());
    System.out.println("JDBC Product Name        = " + dbConnection.getMetaData().getDriverName());
    System.out.println("JDBC Product Version     = " + dbConnection.getMetaData().getDriverVersion());
     
     
    String query="SELECT ....";
     
    // Send the Query
    Statement stmt = dbConnection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
    ResultSet result = stmt.executeQuery(sqlquery);
    PS: mes parametres de createStatement sont ok pour oracle, mais pour 4D je sais pas...

    ---
    Farid.

  8. #8
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 19
    Par défaut
    alors pour le moment j'ai ca:

    Setting up connection to DataBase:
    DataBase Product Name = 4D Database
    java.sql.SQLException: com.fourd.jdbc.DatabaseMetaDataImpl: Method getDatabaseProductVersion is not implemented

    je vais supprimer la ligne


    Setting up connection to DataBase:
    DataBase Product Name = 4D Database
    JDBC Product Name = 4D JDBC Driver v1.0
    JDBC Product Version = 1.0
    java.sql.SQLException: com.fourd.jdbc.BooleanExpression::getopValue: Invalid date - "31 DEC 2008"

    bon la c'est ma requette qui plante... bon

    Setting up connection to DataBase:
    DataBase Product Name = 4D Database
    JDBC Product Name = 4D JDBC Driver v1.0
    JDBC Product Version = 1.0

    ok maintenant ca marche

    Si c'est le preparestatement qui plante je suis dans la M... car j'ai besoin de mettre une date

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Par défaut
    ok,

    Donc ca semble confirmer ce que je pensais.
    Verifies comment la date est renseigne sur le prepareStatement, a mon avis il doit y avoir un truc a ce niveau (peut etre specific a 4D ?).

    ---
    Farid

Discussions similaires

  1. Nombre de ligne contenu dans un ResultSet
    Par BRAUKRIS dans le forum JDBC
    Réponses: 3
    Dernier message: 12/09/2005, 10h40
  2. [JDBC] Nb de rows dans un resultSet
    Par Original Prankster dans le forum JDBC
    Réponses: 2
    Dernier message: 05/09/2005, 12h11
  3. [Oracle][JDBC]sauvgarde du contenu tables
    Par zaiane dans le forum JDBC
    Réponses: 4
    Dernier message: 05/08/2005, 11h18
  4. Réponses: 2
    Dernier message: 19/04/2005, 15h29
  5. [Struts][JDBC] Afficher le contenu d'un ResultSet
    Par ArseNic dans le forum JDBC
    Réponses: 11
    Dernier message: 26/01/2005, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo