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

Java Discussion :

Exécuter requête SQLServer avec Java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Par défaut Exécuter requête SQLServer avec Java
    Bonjour,

    Je ne sais pas si je me trouve au bon endroit dans le forum mais je vais vous expliquer mon problème depuis le début.

    Je voulais trouver un équivalent en SQLServer de la fonction EXPLAIN en MySQL et on m'a donné en réponse cette requête: (car je code en java et je voudrais stocker le résultat dans un objet java)
    SET SHOWPLAN_XML ON;
    DECLARE @T TABLE (C XML);
    INSERT INTO @T
    EXEC ('SELECT * FROM sys.databases');
    SELECT * FROM @T;

    Malheureusement je n'arrive pas à l'exécuter en passant par java.
    Ma connexion à la Base de Données (que ce soit en SQLServer 2000 ou 2005) fonctionne avec le driver "net.sourceforge.jtds.jdbc.Driver"

    Donc voilà je voudrais savoir si vous pouvez m'aider à exécuter cette requête en passant par java et en stockant le résultat dans un objet java (une liste serait idéale)

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    on peux voir le code qui l'exécute? Et l'erreur que tu as.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Par défaut
    En fait j'ai essayé différentes méthodes: (je n'ai pas garder tous mes tests als je vais essayer de faire un résumé :s )
    - j'ai utilisé "SqlMapSession().queryForObject(...)"
    En exécutant les requêtes une par une mais du coup il me disait que @T n'était pas déclaré pour le INSERT
    - ensuite j'ai essayé avec Statement "stmt" : "stmt.executeQuery(...)"
    ce qui m'a donné le même résultat
    - et enfin on m'a dit d'utiliser des procédures stockées (avec PreparedStatement) ou commandtext mais alors là je bloque totalement... je ne sais pas comment faire

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Par défaut
    voilà un exemple de ce que j'ai fait:

    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
    List<?> result = null;
    		List <String> tempResu = new ArrayList<String>();
     
    		try {
    			getSqlMapSession().queryForObject("executeRequeteSQLServer", "SET SHOWPLAN_XML ON");
    			getSqlMapSession().queryForObject("executeRequeteSQLServer","DECLARE @T TABLE (C XML)");
    			getSqlMapSession().queryForObject("INSERT INTO @T EXEC ('SELECT * FROM sys.databases')"); 
    			result = getSqlMapSession().queryForList("SELECT * FROM @T");
    			getSqlMapSession().queryForObject("executeRequeteSQLServer", "SET SHOWPLAN_XML OFF");
    		}catch(Exception e) {
    			tempResu.add("ERREUR LORS DE L'EXECUTION DU EXPLAIN: ");
    			System.out.println(e);
    			result = tempResu;
    		}
    		System.out.println("resultat: " + result);
    		return result;
    et voilà l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    com.ibatis.sqlmap.client.SqlMapException: There is no statement named INSERT INTO @T EXEC ('SELECT * FROM sys.databases') in this SqlMap.
    resultat: [ERREUR LORS DE L'EXECUTION DU EXPLAIN: ]

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Par défaut
    ou sinon j'ai créer cette procédure stockée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE PROCEDURE explainSQLServer 
    	@QUERY VARCHAR(8000)
    AS
    BEGIN
    	SET SHOWPLAN_XML ON;
    	DECLARE @T TABLE (C XML);
     	INSERT INTO @T 
    	EXEC (@QUERY);
     	SELECT * FROM @T;
    END
    et exécuté ce code:

    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
    public List<?> explain(String req) throws SQLException {
    		List<?> result = null;
    		List <String> tempResu = new ArrayList<String>();
     
    		try {
    			  JtdsCallableStatement cstmt = (JtdsCallableStatement) connexion.prepareCall("{call explainSQLServer(?)}");
    		      cstmt.setString(1, req);
    		      cstmt.execute();
    		      cstmt.close();
    		}catch(Exception e) {
    			System.out.println(e);
    			tempResu.add("ERREUR LORS DE L'EXECUTION DU EXPLAIN");
    			result = tempResu;
    		}
    		return result;	
    	}
    ce qui me donne cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.sql.SQLException: Procédure stockée*'explainSQLServer' introuvable.
    J'ai enregistré la procédure dans l'endroit proposé par défaut par SQL Server Management Studio

  6. #6
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Salut,

    C'est quoi la fonction "getSqlMapSession()" ?

    Et pour gagner un peu de temps, est ce que tu peux aussi poster le code de la classe que getSqlMapSession retourne ?
    Parce que d'apres l'erreur postée, j'ai l'impression que c'est plutot la fonction queryForObject qui est mal utilisée.

    a+

Discussions similaires

  1. Problème exécution requête SQL avec HSQLDB
    Par montis dans le forum JDBC
    Réponses: 1
    Dernier message: 23/03/2012, 09h37
  2. Requête SELECT avec java
    Par jowelle dans le forum Langage SQL
    Réponses: 9
    Dernier message: 13/11/2011, 00h01
  3. Requête SQL avec JAVA
    Par bdptaki dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 27/02/2011, 14h52
  4. [AC-2007] Exécution requêtes action avec le Runtime
    Par Baillot Philippe dans le forum Runtime
    Réponses: 5
    Dernier message: 03/09/2010, 21h06
  5. Exécuter un .exe avec java
    Par chebmo1986 dans le forum Langage
    Réponses: 1
    Dernier message: 29/04/2009, 17h05

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