My jdbc sürücüsü mysql db sürüm 5.1.25'tir.Noktalı virgülle ayrılmış birden çok soruyu MySQL Connector/J ile yürütebilir miyim?
statement.execute("select fullName from user where user_id=1; select fullName from user where user_id=2");
Ve her zaman özel durumu alıyorsunuz:
ben şöyle sql sorguyu yürütmek istiyoruz
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select fullName from user where user_id=2' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2809)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2758)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:894)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:732)
at dbViewer.model.UserConnectionManager.retrieveRoutinesNames1(UserConnectionManager.java:622)
at dbViewer.model.UserConnectionManager.main(UserConnectionManager.java:637)
ANCAK bu aynı sorguyu çalıştırdığınızda çalıştığını komut satırından (noktalı virgülle ayrılmış) mükemmel ve beklendiği gibi iki tablo çıktılar.
Muhtemelen değil - iki sonuç kümelerini döneceğini sql ne yürütmek tarafından döndürülen olacak()? Muhtemelen tek bir beyanınız varsa her şey yolunda mı? – DaveRlz
Tek bir sorguda birden çok ifadeye izin vermemek de mükemmel bir güvenlik önlemi değildir. Birden çok sorguyu yürütürseniz, enjeksiyon bir saldırganın tamamen keyfi SQL yürütmesine izin verebilir: http://xkcd.com/327. 'WHERE user_id = 1 OR user_id = 2' kullanıcısından fullName seçmelisiniz. SQL enjeksiyonuna karşı verimlilik ve güvenlik için hazırlanmış ifadeler de kullanmalısınız. – yshavit