2012-07-30 19 views
5

Sono nuovo nel database e recentemente ho iniziato a scrivere casi di test per il database H2. Voglio sapere come testare una procedura memorizzata in Eclipse. Ho visto quanto segue:?Stored procedure nel database H2

http://www.h2database.com/html/features.html#user_defined_functions

How to CREATE PROCEDURE in H2

Il codice di esempio dato nel collegamento h2database,

"CREATE ALIAS NEXT_PRIME AS $$ 
String nextPrime(String value) { 
    return new BigInteger(value).nextProbablePrime().toString(); 
} 
$$; 
" 
  • Dove questo dovrebbe essere dichiarato e come eseguirlo ?

PS - Ho il file H2 JAR e lo sto testando.

Se qualcuno può dirmi come scrivere una semplice procedura memorizzata in Java per H2, sarebbe di grande aiuto.

Inoltre c'è qualche equivalente di quanto segue in H2?

"begin dbms_output"?

Grazie.

+0

Hai letto la documentazione? La dichiarazione che hai pubblicato è un'istruzione SQL, devi eseguirla usando l'API JDBC. –

+0

Voglio sapere come chiamare questo utilizzando l'API. Qualsiasi riferimento al codice di esempio sarebbe di grande aiuto. Dovrebbe essere dichiarata questa parte SQL? Capisco che questo è probabilmente molto elementare, ma sono appena agli inizi. Grazie – Abi

+0

Ci sono tonnellate di codici di riferimento di esempio su Internet, e c'è abbondanza di documentazione sul sito web H2. Hai solo bisogno di cercare e leggere. Suggerisco di imparare prima le basi su JDBC e SQL. –

risposta

6

È possibile che siano trascurati gli esempi in src/test/org/h2/samples/Function.java. Ecco un esempio correlato:

Connection conn = DriverManager.getConnection("jdbc:h2:mem:", "sa", ""); 
Statement st = conn.createStatement(); 
st.execute("CREATE ALIAS getVersion FOR \"org.h2.engine.Constants.getVersion\""); 
ResultSet rs; 
rs = st.executeQuery("CALL getVersion()"); 
if (rs.next()) System.out.println("Version: " + rs.getString(1)); 

Console: Version: 1.4.191

Addendum: La funzione non è limitata alle funzioni; i metodi con alias possono eseguire arbitrariamente Java code. Ad esempio, il metodo query() definito in Function.java può alias e chiamato come mostrato di seguito:

Connection conn = DriverManager.getConnection("jdbc:h2:mem:", "sa", ""); 
Statement st = conn.createStatement(); 
st.execute("CREATE ALIAS query FOR \"cli.Function.query\""); 
rs = st.executeQuery("CALL query('SELECT NAME FROM INFORMATION_SCHEMA.USERS')"); 
while (rs.next()) { 
    System.out.println("User: " + rs.getString(1)); 
} 

Console: User: SA

+0

Grazie @trashgod (+1) - * finally *, un esempio completo di invocazione della funzione Java come alias. – smeeb

+0

In revisione, si noti che 'cli.Function.query' è una copia di' org.h2.samples.Function.query ' – trashgod

6

Non c'è stored procedure e funzione userdefined SQL nel database H2 invece che utilizziamo java metodi e creare un alias per riferirlo. Possiamo chiamare i metodi usando l'alias.

Di seguito è riportato un semplice esempio: **

DROP ALIAS IF EXISTS MYFUNCTION; 
CREATE ALIAS MYFUNCTION AS $$ 
String getTableContent(java.sql.Connection con) throws Exception { 
    String resultValue=null; 
    java.sql.ResultSet rs = con.createStatement().executeQuery(
    " SELECT * FROM TABLE_NAME"); 
     while(rs.next()) 
     { 
     resultValue=rs.getString(1); 
     } 
    return resultValue; 
} 
$$; 
+1

Penso che tu abbia dimenticato' rs.next() '. –

+0

@ThomasMueller H2 non supporta ancora le stored procedure? Per favore guarda il mio ultimo commento nella sezione commenti delle domande È giusto o sbagliato? –

+1

@AbdulJabbarWebBestow H2 sempre supportato stored procedure ... Forse la definizione di stored procedure non è la mia definizione? Qual è la tua definizione? Qualcosa che sia compatibile al 100% con Oracle? Sì, H2 non è compatibile al 100% con Oracle. –

1

Stored procedure nel database di H2 è lo stesso come java methods.So scrivere metodi Java e può richiamare usando pseudonimi.

Problemi correlati