所以我在使用以下代码时遇到问题,想知道是否有其他方法来创建和删除表,其中表名是从用户处获取的,以下代码在使用“'”单引号时会出错。请帮忙
public void droptable(String tablename) {
SQLiteDatabase db =this.getWritableDatabase();
db.execSQL("DROP TABLE IF EXISTS " + tablename);
}
public void createtable(String tablename)
{
SQLiteDatabase db = this.getWritableDatabase();
String query = String.format("CREATE TABLE IF NOT EXISTS %s ( %s INTEGER PRIMARY KEY AUTOINCREMENT , %s TEXT )",tablename,COLUMN0,COLUMN1);
db.execSQL(query);
}
有更好的方法吗?
最佳答案
除非您的应用程序本身会导出 SQLite 数据库,并且用户打算在其他地方使用该 SQLite 数据库,否则用户将永远不会通过您的应用程序看到此表。
这为您提供了多种选择:
不要使用用户输入的值作为表名。相反,您自己生成一个有效的表名称,并保留生成的名称与用户为每个表输入的“显示名称”的映射。
通过删除不支持的字符,将用户输入的值转换为有效的表名称。
将用户输入的值括在引号 (
"%s"
) 中,但如果用户输入带引号的表名称,则会出现问题。通过拒绝将非标准字符作为
EditText
的一部分来防止用户输入无效的表名称验证用户输入的值,如果用户输入的内容会导致 SQL 错误,则显示错误对话框
关于java - android中如何防止sql注入(inject)攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52137610/