execSQL:bindargs 更好吗?

IKe*_*ail 1 sqlite android android-sqlite

我想知道可以采用 1 或 2 个参数的 execSQL 方法。
为什么使用第二种方法,如果我可以使用对象直接在SQLite db上进行操作?

例如:

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

这比使用这个更好吗

db.execSQL("INSERT INTO "+ TableName +" VALUES (null,"+  type.getName() +")")
Run Code Online (Sandbox Code Playgroud)

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

Fan*_*mas 5

方法更好。

例如,它使您免于 SQL 注入。
因为它为您处理数据类型。

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

IE:

要正常工作,您应该像这样编写方法2

db.execSQL("INSERT INTO " + TableName + " VALUES (null, '" +  type.getName().replace("'", "''") + "')");
Run Code Online (Sandbox Code Playgroud)

所以...

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