来自 Douglas Crockford 教授 Javascript 的背景,他高度重视不使用 eval,并且他的教育背景是使用像 exec 这样的通用方法会带来安全漏洞,这是一种不好的形式,无论如何,有没有办法删除 SQLite 表(如果存在),无需求助 execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE)
? current method documentation似乎表明 execSQL 是唯一的方法,因为唯一的删除方法是:
Convenience method for deleting rows in the database.
并且deleteDatabase适用于数据库,而不是表。
最佳答案
要执行 DROP TABLE IF EXISTS,请使用 execSQL
。
这不是 JavaScript,其中 eval
能够从 JavaScript 中执行 JavaScript 语句。
SQL是一种与Java不同的语言,因此构造SQL字符串是执行SQL的唯一方法。
除非攻击者能够控制 DATABASE_TABLE
符号的内容,否则不存在安全漏洞。
如果 execSQL
函数对您来说太通用,请创建一个 dropTableIfExists
辅助函数来为您格式化字符串(并且 quotes the identifier 正确)。
关于java - 如何在不调用execSQL的情况下删除SQLite表IF EXISTS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24872548/