我实际创建了一个创建动态表单的android应用程序,其中每个表的列标题由用户自己动态设置,我的请求是我的应用程序应该允许用户输入列带有单引号的标题,例如 - 名称' s,没有' 等。我已经尝试过这段代码,它有助于将单引号字符串插入数据库
public void CreateDynamicTables(String Table_Name, List<String> arr) {
SQLiteDatabase dbs;
dbs = this.getWritableDatabase();
dbs.execSQL("DROP TABLE IF EXISTS " + Table_Name);
String query = "CREATE TABLE " + Table_Name + "(" + CID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, ";
for (int i = 0; i < arr.size(); i++) {
if(i==arr.size()-1){
query+="`"+arr.get(i)+"`"+ " TEXT);";
}else{
query+="`"+arr.get(i)+"`"+ " TEXT,";
}
}
System.out.println(" Final Query :: " + query);
dbs.execSQL(query);
//ColumnNames(Table_Name);
System.out.println(" successfully created table from FILE :: " + query);
dbs = this.getWritableDatabase();
dbs.close();
}
虽然我有
三个不同的列标题
我在改变表格时仍然遇到问题,我遇到了以下异常
android.database.sqlite.SQLiteException: duplicate column name: 'single's' (code 1): , while compiling: ALTER TABLE smp07 ADD COLUMN `'single's'` TEXT
ALTERTABLE的columnNames:[&#39; single&#39;&#39;,&#39; triple&#39;,&#39; double&#39;]
改变代码
if(cols.size()<arr.size()){
db=this.getWritableDatabase();
if(db.isOpen()){System.out.println("Open Database Confirmed...!!");}
System.out.println(" in add column in table");
for (int i = 0; i < arr.size(); i++) {
if(!cols.contains(arr.get(i))){
System.out.println("COlumn names are:"+arr.get(i).toString());
System.out.println(" ADD column Alter table");
db.execSQL("ALTER TABLE "+ Table_name +" ADD COLUMN "+"`"+arr.get(i)+"`"+" TEXT");
}
}
}
db.close();}
PS:如果插入了不同的列标题,则会发生
如果有另一种安全的方法在sqllite plse help中插入单引号语句
答案 0 :(得分:0)
在SQL中,标识符(例如列/表名称)可以用双引号引用。在这种情况下,实际名称中的任何双引号必须通过加倍来转义。
为了与其他数据库兼容,SQLite还允许使用单引号,反引号或方括号引用标识符。
无论如何,错误消息“重复列名”与引用无关;它表示您已尝试再次添加同一列。