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

  • Doc Adams

    Doc Adams

    20 HAZİRAN 2007
  • Kyler Briskey

    Kyler Briske

    20 ŞUBAT 2011
  • Sam Kear

    Sam Kear

    14 Temmuz 2007