2010-12-03 10 views
1
StringBuffer sql = new StringBuffer("{ call ? := mailmerge_package.getLetters(?, ?, ?)}"); 

Je sais que c'est comme une instruction sql mais il n'y a pas d'appel en SQL.Qu'est-ce que cela signifie? (java, base de données)

Quelqu'un peut-il me expliquer ce que cela signifie et comment se fait-il d'être compris par Java

EDIT:

import oracle.jdbc.driver.OracleTypes; 
//omitted code 
CallableStatement cs = null; 
     ResultSet rs = null; 
    StringBuffer sql = new StringBuffer("{ call ? := mailmerge_package.getLetters(?, ?, ?)}"); 
try { 
      cs = conn.prepareCall(sql.toString()); 
      cs.registerOutParameter(1, OracleTypes.CURSOR); 
      DAOUtils.setLong(cs, 3, checklistAnsMastId); 
      DAOUtils.setLong(cs, 2, workEntityId); 
      cs.setLong(4, patientId); 
      DAOUtils.setLong(cs, 5, encounterId); 
      cs.setString(6, encounterType); 
      cs.execute(); 
      rs = (ResultSet)cs.getObject(1); 
+1

Nous aurons besoin de contexte. Nous n'avons aucune idée de la technologie d'accès aux données que vous utilisez. –

+0

c'est un oracle db – code511788465541441

+0

@ user521180: Ce n'est pas la technologie data * access * - c'est la technologie * storage *. Vous avez posté du code qui crée un StringBuffer, mais vous n'avez rien dit de la façon dont il est utilisé. –

Répondre

3
{call <<procedure name>>} 

est un SQL escape sequence. Fondamentalement, étant donné que différentes bases de données ont une syntaxe différente pour appeler une procédure définie par l'utilisateur et que différentes bases de données ont des fonctions intégrées différentes pour des fonctions de date/heure communes, les pilotes JDBC implémentent un certain nombre de séquences d'échappement génériques. spécification (c'est-à-dire {call <<procedure name>>}) et développe cette syntaxe spécifique à la base de données. Il existe plusieurs autres séquences d'échappement pour des éléments tels que les jointures externes, les littéraux de date et les fonctions de chaîne qui peuvent être utiles si vous essayez d'écrire du code agnostique de base de données. Ces séquences d'échappement ont été définies à l'origine dans l'API ODBC, puis adoptées par JDBC, vous pouvez donc trouver plus de documentation liée à ODBC que JDBC.

6

Cela ressemble à SQL, vous pouvez passer à Oracle.

Si tel est le cas, cela peut être utilisé pour appeler une fonction Oracle mailmerge_package.getLetters qui renvoie une valeur. Cette valeur est analysée par JDBC et la couche Db pour remplacer la première?, Ceci peut être lu dans une variable Java. la fonction Oracle prend 3 paramètres (le 3? entre parenthèses)

2

Il est appel à une procédure stockée d'une base de données. Mais quelle base de données, je ne peux pas dire à partir de ce code.