2015-08-25 17 views
6

içinde parametre ve parametre oluştururken ArrayIndexOutOfBoundsException'ı atar Bir java.sql.PreparedStatement nesnesinden ParameterMetaData'yı almaya çalışıyorum. PreparedStatement.getParameterMetaData(), sql-string

dokümantasyon şey veritabanında bir sorun olduğunda onun bir SQLException atma diyor iken

, Şu anda ArrayIndexOutOfBoundsException alıyorum. oracle.jdbc.driver.OracleDriver Bir ojdbc6.jar ve kullanımında bir 64 bit JDK 1.6.0.45 var:

Bu JDBC sürücüsü URL'yi kullanıyorum.

PreparedStatement stmt = myOracleConn.prepareStatement(sql); 
preparedStatements.add(stmt); 
ParameterMetaData bla2 = stmt.getParameterMetaData(); //this Line throws the Exception 

Ben bu yalnızca olur öğrendim, ben sql-String içinde bir yorum kullandığınızda:

aşağıdaki yapıyorum.

Yani benim SQL olduğunda:

1) (no comment ama parametresi)

"SELECT * FROM DUAL WHERE 1 = ?" --> no error occurs 

2) (yorum ve parametre)

"/* mySampleComment */ SELECT * FROM DUAL WHERE 1 = ?" --> the indexoutofbounds exception occurs 

3) (comment ama hayır parametresi)

"/* mySampleComment */ SELECT * FROM DUAL WHERE 1 = 1" --> no error occurs 

I wonde r eğer buysa o ve ben bir şey eksik olup olmadığını ... birisi bu konuda bir şeyler biliyor mu ya da benim sqls içinde yorumların kullanmamalısınız?

edit1: kullanma --comments yerine aynı davranış/**/sonuçlanır. edit2: ben istisna alır

\n\t\t\t\t--great 

yer verdi büyük bir SQL var, hiç değil gibi görünüyor. Örnek sqls hala postet on dahil olmak üzere,

Bazı bilgiler eksik, sadece istek için çalışacaktır. Şimdiden teşekkürler. Sadece Oracle JDBC sürücüsü bir hata buldum gibi Sen() .getParameterMetaData yürütmeden önce açıklamaya parametrelerini ayarlamak gerekir konum

+0

görünüyor. Öte yandan, JBDC sürücülerinin sorgu içinde Java yorumları almaya hazır olduğunu sanmıyorum ... – ericbn

+4

Standart SQL bu tür yorumları desteklemiyor. Genellikle sadece --' 'ile başlayan tek satırlık yorum destekler (ve sonra, tabii ki, satırın başına koydu olamaz). Ama neden onları çalıştıran programdan ziyade SQL dizelerine yorum yaparsınız? – RealSkeptic

+1

ve ipuçları kullanımını aboute ne olacak? yorumlar olarak da kodlanırlar, düzenleme: sql içeriklerini extern'ten girildiği için sql'de yorumlar kullanıyorum, yorumlar sql rutinlerini değil sql rutinlerini açıklıyor – Kaspatoo

cevap

0

PreparedStatement stmt = myOracleConn.prepareStatement(sql); 
stmt.setString(1,"test"); 
ParameterMetaData metadata = stmt.getParameterMetaData(); 
+0

Javadoc'ta öyle değil. 'Bazı sorgular ve sürücü uygulamaları için' ParametreMetaData 'nesnesi tarafından döndürülen veriler' PreparedStatement 'yürütüldükten sonra kullanılamayabilir, ancak burada geçerli görünmüyor. – EJP

+0

Peki ... sonuçları deneyin ve raporlayın ... –