[Java-SQLServer] Appeler une procédure stockée contenant des espaces

Appeler une procédure stockée contenant des espaces [Java-SQLServer] - Java - Programmation

Marsh Posté le 08-06-2004 à 10:18:24    

J'essaye d'appeler une procédure stockée contenant des espaces sur un SGBD SQL Server 2000.
Sur la base d'exemple "Northwind", il y a une procédure qui s'appelle "Ten Most Expensive Products".
Lorsque j'essaye de l'appeler via JDBC, j'ai une exception:

Code :
  1. [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Impossible de trouver la procédure stockée 'TenMostExpensiveProducts'.
  2. java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Impossible de trouver la procédure stockée 'TenMostExpensiveProducts'.
  3. at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
  4. at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
  5. at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
  6. at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
  7. at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
  8. at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
  9. at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
  10. at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
  11. at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
  12. at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
  13. at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
  14. at com.microsoft.jdbc.base.BaseStatement.executeInternal(Unknown Source)
  15. at com.microsoft.jdbc.base.BasePreparedStatement.execute(Unknown Source)
  16. at com.sqlsphere.api.test.Northwind.Ten_Most_Expensive_Products(Northwind.java:7085)
  17. at com.sqlsphere.api.test.Main.testNorthwind(Main.java:78)
  18. at com.sqlsphere.api.test.Main.<init>(Main.java:24)
  19. at com.sqlsphere.api.test.Main.main(Main.java:94)


Et voici le code appelant cette proc:

Code :
  1. public StoredProcedureResult Ten_Most_Expensive_Products()
  2.          throws SQLException {
  3.     final Connection connection = getConnection();
  4.     final StoredProcedureResult returnValue;
  5.     try {
  6.       CallableStatement callableStatement;
  7.       callableStatement = connection.prepareCall("{?=call Ten Most Expensive Products}" );
  8.       callableStatement.registerOutParameter(1, java.sql.Types.INTEGER);
  9.       callableStatement.execute();
  10.       returnValue = getStoredProcedureResult(callableStatement);
  11.     } finally {
  12.       unlockConnection(connection);
  13.     }//end try
  14.     return returnValue;
  15.   }//end Ten_Most_Expensive_Products


Donc apparement le driver Microsft elimine les espaces dans le nom de la procédure... J'ai essayé en mettant le nom de la proc entre crochets comme indiqué dans la doc de TransacSQL mais ca ne change rien.
Est-ce que quelqu'un a deja eu le probleme ?


---------------
Light is right
Reply

Marsh Posté le 08-06-2004 à 10:18:24   

Reply

Marsh Posté le 08-06-2004 à 10:22:42    

Et les simples quotes ?
 
callableStatement = connection.prepareCall("{?=call 'Ten Most Expensive Products'}" );


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 08-06-2004 à 10:27:31    

Nan ca ne marche pas, cette fois ci j'ai:

Code :
  1. [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Ligne 1 : syntaxe incorrecte vers 'TenMostExpensiveProducts'.


 
je trouve rien sur MSDN en plus  :??:


Message édité par nerisson le 08-06-2004 à 10:27:41

---------------
Light is right
Reply

Marsh Posté le 08-06-2004 à 11:41:15    

Aprés avoir décompilé le driver Microsoft  :D et avoir fait un tour sur les forums de java.sun.com j'ai trouvé la soluce.
Il faut mettre le nom de la procédure entre guillimets, comme ca:

Code :
  1. callableStatement = connection.prepareCall("{?=call \"Ten Most Expensive Products\" }" );


---------------
Light is right
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed