2009-12-22 18 views
12

SQL Server'a (2005) Microsoft SQL Server JDBC Sürücüsü 2.0'ı kullanarak Java'ya bağlanıyorum.Dönüş Değerini Alma JDBC MSSQL

İade edilen değeri saklı yordamdan nasıl alırım? Ben böyle bir şey yapıyorum:

Connection connection = dataSource.getConnection() 
CallableStatement proc = connection.prepareCall("{ call dbo.mySproc() }"); 
proc.execute(); 

Ben yürütmek kullanarak olmalı()? Sorguyu çalıştır()? executeUpdate()? Bunların hiçbiri varsayılan olarak bir dönüş değeri döndürüyor gibi görünmüyor, ama nasıl elde edileceğine gerçekten emin değilim.

DÜZEN 1: Açık olmak gerekirse, saklı yordamları nasıl arayacağımı biliyorum. Bu soru, özellikle RETURN VALUE (Sonuç Kümesinin aksine) nasıl elde edileceğiyle ilgilidir. Dönüş Değeri, genellikle Sonuç Kümesi olmayan bir sorgu çalıştırdığınızda veya SQL'inizde RETURN 0 gibi bir şeyi özellikle belirtirseniz oluşturulan bir tamsayıdır.

DÜZEN 2: executeUpdate() bir int döndürür, ancak bu int Dönüş Değeri ile aynı değildir. Ayrıca, bir OUT parametresi bir dönüş değeriyle aynı değildir.

+0

aşağıdaki bağlantıları kontrol edin [http://www.exampledepot.com/egs/java.sql/CallProcedure.html](http://www.exampledepot.com/egs/java.sql/CallProcedure.html) [ http://www.jguru.com/faq/view.jsp?EID=30731](http://www.jguru.com/faq/view.jsp?EID=30731) – Umesh

+0

Özellikle almak için arıyorum Dönüş Değeri, sprocs çağrısı hakkında genel bilgi aramıyorum. –

cevap

33

Bozho 2'nci revize cevap yakındı ama oldukça orada. Yine de bana cevabın yolunu açtı. Ben biz ile başlayan kod örneğini alarak

ile bitirmek: Burada

CallableStatement proc = connection.prepareCall("{ ? = call dbo.mySproc() }"); 
proc.registerOutParameter(1, Types.INTEGER); 
proc.execute(); 
int returnValue = proc.getInt(1); 

anahtar parçaları vardır için bir yer kurar prepareCall işlevi "çağrı" önünde "=?" dönüş değeri ve registerOutputParameter. Dönüş değeri her zaman bir int (en azından SQL Server'da, belki diğer DB'lerde farklı olabilir) olarak, bir Tamsayı olarak kaydedilmelidir. Bu nedenle getInt'u kullanarak almalısınız. Bu yöntemi test ettim ve işe yarıyor.

+1

Yukarıda "Types.INTEGER", java.sql.Types.INTEGER'dir. –

1
c.prepareCall("? = .."); 
cs.execute(); 
String returnedValue = cs.getString(1); 

(ya da uygun türde bir yöntem. Alternatif bir yöntem olarak getObject kullanabilirsiniz)

an old getting started tutorial

kaynaktan CallableStatement içinde getXXX yöntemleri parametreleri ve/veya dönüş değeri değerleri almak saklı bir prosedür.

(Btw, Umesh sağlandı bağlantılar bu tür bilgileri vardı.)

+0

Bu, bir dönüş değerinden farklı olan bir çıkış parametresi döndürür. Saklı yordamın çalışması için tanımlanmış bir çıkış parametresi olması gerektiğini düşünüyorum. –

+0

no, CallableStatement bağlamında değil (güncellenmiş cevabımı kontrol et) – Bozho

+0

Hazırlıklı çağrı sözdizimi yanlış (JDBC çıkış sözdizimi yok), çıkış parametresinin daha sonra kullanılmak üzere kaydedilmesi gerekiyor ve bağlantı kesildi. .. –

İlgili konular