Bu sorunda ele alınan işlev, verilen SQL komut dosyasını yürütmektir. Komut dosyasının içeriği, uygulama çalışma zamanı sırasında kullanıcı tarafından tanımlanmak üzere tasarlanmıştır. Komut dosyası, bir INSERT
ifadesinin veya karmaşık bir PL/SQL
ifadesinin bir sırasının olup olmadığı olabilir. Çalışma zamanı sırasında girdi (nihayetinde String örneği olarak) olduğundan, Java ile yürütülmelidir.Java'da SQL komut çalıştırması için genel yaklaşım
Güncel yaklaşım, kullanıcı girdisini bir PreparedStatement
ile sarmak ve yürütmek içindir. Bu çözüm mevcut test durumları için çalışır. Esas endişe, kullanılan veritabanının, testler tarafından kapsanmayan tam işlevselliğini sağlamaktır, yani aynı kullanıcı SQL komut dosyasını veritabanı satıcısının sağladığı konsola aktarmaya en yakın olan çözüm.
Şu anki yaklaşımda PreparedStatement
ile öngörülen herhangi bir sınırlama bulunmadığını merak ediyorum? Java ile SQL betiğinin yürütülmesi için daha iyi bir genel yaklaşım var mı?
Tam olarak ne yapmaya çalışıyorsunuz? Sadece her şeyi çalıştırmak istiyor musunuz, http://sqlfiddle.com/ gibi bir şey yaratmaya mı çalışıyorsunuz? –
Güvenlik açıkları burada bir endişe kaynağı mı? Komut dosyasının potansiyel olarak istenmeyen veya tehlikeli bir şey yapmasını engellemek için yeterli kısıtlamalar var mı? (Kullanıcının veritabanında yer alan ayrıcalıkları aracılığıyla?) –
@SteveChambers, kullanıcı kendi veritabanını değiştirdiği ve tamamen sorumlu olduğu için güvenlik açığıyla ilgili endişeler yoktur. Temel sorun, veritabanının tam işlevselliğini en verimli şekilde sağlamaktır. –