Bir veritabanında mySQL sorgularını/deyimlerini çalıştıran bir araç oluşturmaya çalışıyorum. Çalıştığım sorun şu ki bu sorgular/ifadeler bir metin kutusu gibi bir serbest form metninde. Profesyonel bir SQL programıyla da kullanıyorum. Eğer sorgu/ifadeleri bir açıklama veya bir seçme sorgusu çalıştırmak ya sonra yorum, SET ifadeleri ve içerebilir görebileceğiniz gibiSET ifadelerini normal ifadelerle birleştirin
#Example of a query statement
@SET fName = "John"
SELECT * FROM Person WHERE Person.firstName = fName
#Example of an execute statement
@SET fName = "John"
DELETE FROM Person WHERE Person.firstName = fName
: gibi bir şey olurdu Bir örnek vermek gerekirse. Ayrıca, her zaman düzgün bir şekilde biçimlendirilmeyebilirler, bu nedenle, nesneler veya sekmeler veya boşluklar arasında boş çizgiler olabilir.
PreparedStatements seçeneğiyle ilgili bilgileri biliyorum, ancak bu işe yarayacak olsa da, serbest metin olarak düzenlenebilir tüm sorgu/deyimin faturasına uymuyor. Sorum, Java ile bu ifadeleri/sorguları nasıl yürüteceğim? executeBatch ikinci örnek için çalışır, ancak ResultSet'i döndürürken ilkini değil.
'execute()' işlevine bakmanız gerekiyor, otomatik işlem yapmayı devre dışı bıraktığınızdan emin olun. –
.setAutoCommit (false), yürütülen deyimlerin yığınlanmasını sağlar mı? Sadece .execute() "@SET xxxx" üzerinde çalışır. Açıklamaları ayırırsam ve .executeUpdate() veya .executeQuery() ile .setAutoCommit (false) çalıştırırsam bunları yığmam ve sonra da Hepsi infaz edildi mi? – ZeW
Düzenli olarak MySQL kullanmıyorum ve hiç bir zaman @ SET kullanmıyorum, ancak bunların taahhüt sınırları boyunca kalıcı olmamasını beklerim (yanılıyor olabilirim). ['Execute'] 'ı kullanmanız gerekir (http://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html#execute-java.lang.String-) çünkü önceden ne tür bir ifadeyi çalıştırdığınızı bilmek. Ve evet, otomatik işlemi devre dışı bıraktığınızda, bağlantı nesnesinde 'commit()' i çağırmanız gerekir. –