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+MS SQL Server] problème avec la fonction getAsciiStream()


Sujet :

JDBC Java

  1. #1
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut [JDBC+MS SQL Server] problème avec la fonction getAsciiStream()
    Bonjour,
    Une fois n'est pas coutume, c'est moi qui demande de l'aide et en apelle à la solidarité inter-développeurs .

    J'essaye d'accèder aux données d'un serveur MS SQL Server 8 en JDBC.
    Les paramètres de connection, ont l'air bon, tout indique que la connection se fait bien, mais lorsque je récupère les données issues de ma requete, j'ai une SQLException qui est lancée, avec le message "La conversion de int en AsciiStream n'est pas prise en charge".
    et voici la pile java :
    Citation Envoyé par La machine virtuelle
    com.microsoft.sqlserver.jdbc.SQLServerException: La conversion de int en AsciiStream n'est pas prise en charge.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
    at com.microsoft.sqlserver.jdbc.Column.throwConversionError(Unknown Source)
    at com.microsoft.sqlserver.jdbc.Column.checkConvertsAsciiStream(Unknown Source)
    at com.microsoft.sqlserver.jdbc.Column.checkGetAsciiStream(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getAsciiStream(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getAsciiStream(Unknown Source)
    at enssib.interressenssib.model.Source.chercherRessources(Source.java:282)
    at enssib.interressenssib.control.RechercheRessources.doGet(RechercheRessources.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:833)
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:639)
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1285)
    at java.lang.Thread.run(Unknown Source)
    Ooh ! la belle pile !

    voici le code qui pose problème (Source.java) :
    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
     
    String requeteRecherche = "SELECT "+this.champIdentifiant+" FROM "+this.nomObjetSource+" "+clauseWhere;
     
    ResultSet res=this.execRequete(requeteRecherche);
    String resultRecherche=new String("");
    while(res.next())
        {
        	resultRecherche=resultRecherche+"<ressource>";
        	InputStream leResultatBrut=res.getAsciiStream(this.champIdentifiant);  // C'EST ICI QUE CA BUG
        	while(leResultatBrut.available()>0)
    	{
        		resultRecherche=resultRecherche+formatter((char)leResultatBrut.read());
    	}
        	resultRecherche=resultRecherche+"</ressource>\n";
        }
    Le message d'erreur renvoyé laisse entendre que le driver jdbc de MS ne sait pas convertir un entier en flux ASCII, mais ça me paraît bizzare quand même !!!
    L'ennui, c'est que je ne peux pas utiliser getInt() à la place de getAsciiStream() car le même code me sert à exploiter plusieures bases de données différentes avec des types de champs différents ...
    De plus, en tapant le message d'erreur dans google, je ne trouve rien ! c'est étrange car d'habitude, pour un message d'erreur type, il y a des dizaines et des dizaines de personnes qui ont eu le même bug, mais là : rien !

    Quelqu'un a-t-il une idée ???

  2. #2
    Expert éminent

    Avatar de christopheJ
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 600
    Points : 8 235
    Points
    8 235
    Par défaut
    Salut,

    D'apres le site de MS, la méthode existe dans le driver :
    http://msdn2.microsoft.com/en-us/library/ms378175.aspx

    Es-tu sur de la version de ton driver? Ce n'est pas un vieille ou exotique version?

  3. #3
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    Merci de ta réponse.
    En effet, la methode existe, ça je le savais déja (sinon le driver n'aurait pas été conforme avec les specs jdbc j'immagine).
    D'ailleurs, j'étais déja allé voir la doc sur le site de MS, et la déclaration de la méthode correspond bien à ce qu'il me faut.

    Le driver, je l'ai téléchargé il y quelques jours sur le site de MS, donc j'immagine qu'il n'est ni exotique ni trop ancien.
    J'en viens même à me demander s'il n'est pas trop récent : mon serveur de données est très exactement "SQL Server Standart Edition" version 8.00.194 qui a été, il me semble (faudra que je demande confirmation à l'admin système) livré de série avec Windows 2000 Server sur lequel il tourne ... donc c'est pas tout nouveau.
    Or, quand j'ai téléchargé le driver sur le site de MS, il me parlait de SQL server 2005. Je me suis dit qu'ils avaient dû assurer la compatibilité ascendante, mais j'ai peut-être eu tord.
    Le problème, c'est que je n'ai pas vu d'autre driver sur leur site

    Quelqu'un a déja eu ce genre de problème ?
    Quelqu'un en sait plus sur les drivers jdbc de MS ?
    Quelqu'un a un driver plus ancien sous le coude pour que j'essaye ?

    Merci d'avance à ce quelqu'un ...

  4. #4
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    Bon, je viens de vérifier : apparament le driver n'est pas en cause.
    Avec Netbeans, dans la fenêtre 'Runtime', j'ai créé un objet Database, je l'ai configuré avec les mêmes paramètres de connection que dans mon script Java, en utilisant le même Driver, et en executant la même requête : ça passe nickel !
    D'un coté c'est rassurant, car ça veut dire que c'est possible, d'un autre coté, je ne vois toujours pas pourquoi ça ne passe pas en utilisant getAsciiStream()

    Cela m'embête beaucoup, car j'ai besoin d'une méthode générique pour accèder aux données sans savoir de quel type elles sont.

    Y'a-t-il une autre façon d'extraire n'importe quel type de donnée sans utiliser getAsciiStream() ?

    Désolé d'être aussi lourd, mais je n'arrive pas à m'en sortir, et je n'arrive pas à trouver des infos la-dessus (à croire que je suis le seul au monde à essayer de faire ça !).

  5. #5
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Citation Envoyé par Hervé Saladin
    Y'a-t-il une autre façon d'extraire n'importe quel type de donnée sans utiliser getAsciiStream() ?
    Et pourquoi pas un "resultset.getObject()" ?!...
    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

  6. #6
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    ben, parce que, bien que :
    Citation Envoyé par la FAQ JDBC
    On peut noter que les méthodes getString et getObject sont des méthodes génériques qui peuvent être employées quelque soit le type SQL de la valeur recherchée.
    Pourtant, j'ai des erreurs avec certains types de données, nottament les timestamp, et les types volumineux du genre blob, longtext ...
    Dans le meilleur des cas, ça ne sort rien, sinon ça lance des exception

Discussions similaires

  1. [SQL-Server] Problème avec la fonction mssql_connect (connexion PHP SQL Server)
    Par flydragon dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/05/2006, 11h59
  2. [SQL Server] Problème avec un curseur ?
    Par evans dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/04/2006, 11h01
  3. [SQL Server]Problème avec une requête récursive
    Par evans dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/04/2006, 20h16
  4. [SQL Server]Problème avec l'authentification SQL SERVER
    Par tidou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/04/2005, 15h40
  5. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24

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