SORU
17 Temmuz 2010, CUMARTESİ


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:

  1. Gelen SQL sorgu ayrıştırma
  2. SQL sorgu derleyin
  3. Plan/veri toplama yolu optimize
  4. 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
17 Temmuz 2010, CUMARTESİ


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. BuPreparedStatement setXxx() yöntemlerden birini değerlerini ayarlamak için kullanmanız gerektiğini unutmayın

    preparedStatement = 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) ve Reader (Clob). Olamaz Bu tipler genelde "sadece" Statement basit yaptığınız gibi toString() yapın. Aşağıda yardımcı yöntem gösterildiği gibi bir döngü içinde PreparedStatement#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();
    

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ★TheCrono Official Channel★

    ★TheCrono

    3 Mayıs 2014
  • Richard Laxa

    Richard Laxa

    30 AĞUSTOS 2012
  • thepoke64738

    thepoke64738

    17 HAZİRAN 2011