Android SQLite:插入单引号

时间:2016-08-03 12:00:08

标签: android sqlite android-sqlite

我实际创建了一个创建动态表单的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中插入单引号语句

1 个答案:

答案 0 :(得分:0)

在SQL中,标识符(例如列/表名称)可以用双引号引用。在这种情况下,实际名称中的任何双引号必须通过加倍来转义。

为了与其他数据库兼容,SQLite还允许使用单引号,反引号或方括号引用标识符。

无论如何,错误消息“重复列名”与引用无关;它表示您已尝试再次添加同一列。