java - 如何在不调用execSQL的情况下删除SQLite表IF EXISTS?

标签 java android sqlite

来自 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/

相关文章:

swift - 预填充 .sqlite 的核心数据 (Swift3)

java - 如何在状态为 Activity 时回滚表并在状态为挂起时删除表?

java - 类型不匹配 : cannot convert from element type Object to String

java - 需要帮助修复 java 程序

SQLite - 具有联合的多个随机结果集

java - 处理已弃用的方法

android - ARM Assembler NEON - 提高性能

java - 优化非常大的数字的算术运算

java - 如何一起使用底部导航栏和侧面导航栏,我的侧面导航按钮不显示,但底部导航

java - 如何生成用于 AES 算法的 128 位 key