execSQL:bindargs更好吗?

时间:2016-01-05 19:19:12

标签: android sqlite android-sqlite

我想知道execSQL方法可能需要1个或2个参数 为什么使用第二种方法,如果我可以使用一个对象直接在SQLite数据库上进行操作?

例如:

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

这比使用

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

第一个例子更安全吗?
执行时更快?
更容易阅读...
还是一样的?

1 个答案:

答案 0 :(得分:4)

方法 1 更好。

例如,它可以帮助您避免SQL注入 因为它为您处理数据类型。

这意味着它在需要时通过添加字符串分隔符并转换撇号来转换字符串。

即:

要正常工作,您应该编写方法 2 ,如

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

因此...

is the 1st example more secure?是的。
faster when executing?不确定是不是。
easier to read是的,一旦你习惯了(主要是基于意见) ... or is it the same?不,对于上面讨论的内容。