2012-01-12 18 views
25

Tek bir android veritabanı uygulaması geliştiriyorum. Sadece hangi kodun daha hızlı yürüdüğünü bilmek istiyorum ve aralarındaki fark nedir?Android SQLite: Hangi sorgu ("sorgu" veya "rawQuery") daha hızlıdır?

sorgu - 1 =

db.rawQuery("select * from user_table where user_id =" + userId, null); 

sorgu - 2 =

db.query(USER_TABLE_NAME, ALL_COLUMNS, "user_id = " + userId, null, null, null, null); 
+0

... onu dene ve görüyor musunuz? Tüm niyet ve amaçlar için "aynı" tahmin edeceğim. Ancak, * lütfen her iki durumda da yer tutucuları kullanın *. –

+0

Önceden kurulmuş bir sisteminiz varsa, üzerinde bazı ölçütler yapın. Ayrıca, ne tür bir işyükü bekliyorsunuz ve hızda hangi marjları bekliyorsunuz? –

cevap

15

kullanımı sorgusu.

Android öncesi derleme sorguları ve çok fazla farklı ham sorgu kullanmak performans sorununa neden olabilir.

rawQuery'yi yalnızca kesinlikle gerekli olduğunda kullanın. Ayrıca, örneğinizin her ikisi de SQL Injection'ın bir MAJOR güvenlik sorununa sahiptir.

Kullanıcı kodunu temizlemelisiniz. Android izin edilir

yapılacak en belirgin şey kullanarak bunu: android kaynağındaki SQLiteDatabase.java baktığımızda

db.query(USER_TABLE_NAME, ALL_COLUMNS, "user_id = ?", new String[] {userId}, null, null, null); 
+3

RE önceden derlenmiş sorgular: Bunlar yalnızca PreparedStatement kullanıldığında geçerlidir. Query() sadece dizeyi oluşturur ve rawQuery() öğesine iletir. –

+0

PreparedStatement, aynı sorguyu birden çok kez çalıştırmayı amaçlıyor, doğru, ama sanırım bir çeşit optimizasyon da sürücü tarafından gerçekleştiriliyor. Çok fazla şikayet sağlandı Android şikayetçi birden çok farklı sorguları kullanırken bazı hatalarla karşılaştım. :) –

+0

@JonAdams Lütfen yorumunuzu anlamama yardımcı olun, 'sadece readyedstatement kullanırken uygulayın', rawetery tarafından da elde edilebilirken aynı zamanda readystatement'i kullanıyoruz? (yani '?' koyabilirsiniz ve argümanları iletebilirsiniz?) – Darpan

5

sorgu (..) inşa etmek QueryBuilder çağırarak biter göstermektedir Tek bir dize olarak sorgulamak ve daha sonra rawQuery() çağırır. Kendi ifadenizi oluşturmak için aynı işi yaptığınızı varsayarak, kabaca eşdeğer olmalıdırlar.