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 :

[SQLServerException] Incorrect syntax near '@P0'


Sujet :

JDBC Java

  1. #1
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut [SQLServerException] Incorrect syntax near '@P0'
    Bonjour,

    Je travaille généralement avec MySQL et dans le cadre d'un nouveau projet je dois utiliser MSSQL.
    Je cherche donc à "imiter" le LIMIT de MySQL.
    Lorsque sous l'exécuteur de requête je rentre ma commande MSSQL, cela fonctionne, par contre quand j'utilise un PreparedStatement j'ai l'exception suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    %com.microsoft.sqlserver.jdbc.SQLServerException: Line 1: Incorrect syntax near '@P0'.
    	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
    	at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
    	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
    	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
    	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
    	at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
    	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
    	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
    	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(Unknown Source)
    Requête sue l'analyseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP 10 * FROM (
    	SELECT TOP 20 * FROM maTable WHERE INTITULE LIKE '%toto%' ORDER BY INTITULE DESC
    	) AS tmp ORDER BY tmp.INTITULE ASC
    Requête en java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    protected static final String INTITULE = "SELECT TOP ? * FROM (" +
    	" SELECT TOP ? * FROM "+TABLE+" WHERE INTITULE LIKE ? ORDER BY INTITULE DESC" +
    	") AS tmp ORDER BY tmp.INTITULE ASC;"; 
    ...
    PreparedStatement ps = dbConnection.prepareStatement(INTITULE);
    ps.setInt(1, offset);
    ps.setInt(2, offset+rows);
    ps.setString(3, "%"+intitule+"%");
    ResultSet rs = ps.executeQuery(); <-- Erreur ici
    Voila, si quelqu'un est inspiré... parce que là je n'ai vraiment aucune idée.

    Merci d'avance
    Manu

  2. #2
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut
    L'erreur provient du paramétrage des valeurs des 'TOP' (via les ?).

    Si je rentre "en dur" des valeurs pour les 2 paramètres alors ça fonctionne.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    protected static final String INTITULE = "SELECT TOP 10 * FROM (" +
    	" SELECT TOP 20 * FROM "+TABLE+" WHERE INTITULE LIKE ? ORDER BY INTITULE DESC" +
    	") AS tmp ORDER BY tmp.INTITULE ASC;"; 
    ...
    PreparedStatement ps = dbConnection.prepareStatement(INTITULE);
    //ps.setInt(1, offset);
    //ps.setInt(2, offset+rows);
    ps.setString(1, "%"+intitule+"%");
    ResultSet rs = ps.executeQuery(); // Ca marche!!
    Merci d'avance pour votre aide (Je cherche tjs la réponse)

  3. #3
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut
    Bonjour,
    Je relance ce post car je cherche tjs la solution et je viens de tomber sur la classe PlatformMsSQLServerImpl du projet Apache DB OJB (Google Code search) qui semble utiliser la même syntaxe que moi sans que ça pose de pb (à priori).
    Si qqu'un pouvait m'expliquer ....

    Merci d'avance

    Manu

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    mettre TOP (?)

Discussions similaires

  1. Incorrect syntax near the keyword
    Par Trady dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 31/12/2012, 15h41
  2. [Server 2000] Transact-sql error Incorrect syntax near '>'
    Par kaygee dans le forum Développement
    Réponses: 3
    Dernier message: 30/03/2011, 13h38
  3. [SSIS] [2K8] Incorrect syntax near the keyword 'MERGE'
    Par gassisprog dans le forum SSIS
    Réponses: 1
    Dernier message: 28/09/2009, 17h02
  4. Incorrect syntax near ' '.
    Par Marc_27 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 03/09/2009, 14h39
  5. Réponses: 2
    Dernier message: 14/04/2009, 10h03

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