所以我在以下代码上遇到问题,并且想知道是否还有其他创建和删除表的方式,其中表名称来自用户,以下代码在使用“”单引号时给出错误。请帮助
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);
}
有更好的方法吗?
答案 0 :(得分:3)
除非您的应用将导出SQLite数据库本身,并且用户打算在其他地方使用该SQLite数据库,否则除非通过您的应用,否则该用户将永远不会看到此表。
为您提供多种选择:
请勿将用户输入的值用作表名。而是自己生成一个有效的表名,并保留所生成的名称与每个表的用户输入“显示名称”的对应关系。
通过删除不支持的字符,将用户输入的值转换为有效的表名。
将用户输入的值括在引号("%s"
)中,但是如果用户输入带引号的表名,则会遇到问题。
通过拒绝非标准字符作为EditText
验证用户输入的值,如果输入的内容会导致SQL错误,则会显示错误对话框