Deyim ve PreparedStatement arasındaki fark
Hazırlanmış Deyimi Deyiminin biraz daha güçlü bir versiyonu, ve her zaman en azından hızlı ve kolay bir İfadesi olarak ele alınmalıdır.
Hazırlanmış Deyimi parametrize edilebilir
Çoğu ilişkisel veritabanları dört adımda OLANLARI (/SQL sorgu işleme:
- Gelen SQL sorgu ayrıştırma
- SQL sorgu derleyin
- Plan/veri toplama yolu optimize
- Optimize sorgu ve veri elde dönüşü / yürütmek
Bir cümle her zaman her SQL sorgu veritabanına gönderilen yukarıdaki dört adım ile devam edin. Yürütme sürecinde Hazırlanan bir bildiri öncesi yürütür adımları (1) - (3) yukarıda. Bazı pre-optimizasyon Hazırlanmış Deyimi oluşturma hemen yapılır böylece. Etkisi yürütülmesi sırasında Veritabanı Altyapısı üzerindeki yükü azaltmak için.
Şimdi benim sorum şu - "Hazırlanmış Deyimi kullanarak herhangi bir diğer avantajı nedir?"
Şimdiden Teşekkürler.
CEVAP
Bir avantajları 22**:
DB tarafında SQL deyimi önbelleğe daha hızlı yürütülmesi ve batches aynı SQL deyimini yeniden kullanma olanağı genel yol açar ve ön derleme.
Yerleşik tırnak ve diğer özel karakterler kaçan tarafından 24* attacks *otomatik önleme. Bu
PreparedStatement
setXxx()
yöntemlerden birini değerlerini ayarlamak için kullanmanız gerektiğini unutmayınpreparedStatement = connection.prepareStatement("INSERT INTO Person (name, email, birthdate, photo) VALUES (?, ?, ?, ?)"); preparedStatement.setString(1, person.getName()); preparedStatement.setString(2, person.getEmail()); preparedStatement.setTimestamp(3, new Timestamp(person.getBirthdate().getTime())); preparedStatement.setBinaryStream(4, person.getPhoto()); preparedStatement.executeUpdate();
ve böyleceyokdize birleştirerek SQL dize değerleri satır içi.
preparedStatement = connection.prepareStatement("INSERT INTO Person (name, email) VALUES ('" person.getName() "', '" person.getEmail() "'"); preparedStatement.executeUpdate();
Hareket hızları ayarı olmayan standart Java nesneleri bir SQL dizesi, örneğin
Date
,Time
,Timestamp
,BigDecimal
,InputStream
(Blob
) veReader
(Clob
). Olamaz Bu tipler genelde "sadece"Statement
basit yaptığınız gibitoString()
yapın. Aşağıda yardımcı yöntem gösterildiği gibi bir döngü içindePreparedStatement#setObject()
kullanarak her şeyi yeniden olabilir:public static void setValues(PreparedStatement preparedStatement, Object... values) throws SQLException { for (int i = 0; i < values.length; i ) { preparedStatement.setObject(i 1, values[i]); } }
Aşağıda: olarak kullanılabilir
preparedStatement = connection.prepareStatement("INSERT INTO Person (name, email, birthdate, photo) VALUES (?, ?, ?, ?)"); setValues(preparedStatement, person.getName(), person.getEmail(), new Timestamp(person.getBirthdate().getTime()), person.getPhoto()); preparedStatement.executeUpdate();
Kır ve devam deyim arasındaki fark...
bir İfade ve Python ile Deyim arasında...
İkili semafor ve dışlama arasındaki fa...
SQL, PL-SQL ve T-SQL arasındaki fark n...
Arasındaki fark "yönetilen" ...