2016-01-05 1 views
0

Je me demandais dans la méthode execSQL qui peut prendre 1 ou 2 arguments.
Pourquoi utiliser la deuxième méthode, si je peux utiliser un objet pour effectuer directement mon opération sur un SQLite db?execSQL: est-ce que bindargs est meilleur?

Dans l'exemple:

db.execSQL("INSERT INTO "+ TableName +" VALUES (null, ?)", 
     new Object[] { type.getName() }) 

est-ce mieux que d'utiliser ce

db.execSQL("INSERT INTO "+ TableName +" VALUES (null,"+ type.getName() +")") 

est le 1er exemple plus sûr?
plus rapide lors de l'exécution?
plus facile à lire ...
ou est-ce la même chose?

Répondre

3

La méthode est meilleure.

Il vous évite par exemple l'injection SQL.
Parce qu'il gère les types de données pour vous. Cela signifie qu'il convertit les chaînes si nécessaire en ajoutant les délimiteurs de chaîne et en convertissant les apostrophes.

i.e. .:

Pour qu'il fonctionne correctement, vous devez écrire la méthode comme

db.execSQL("INSERT INTO " + TableName + " VALUES (null, '" + type.getName().replace("'", "''") + "')"); 

Alors ...

is the 1st example more secure? Oui.
faster when executing? Vous ne savez pas si c'est le cas.
easier to read Oui, une fois que vous vous y êtes habitué (principalement basé sur l'opinion).
... or is it the same? Non, pour ce qui a été discuté plus haut.