列columnname不是唯一的(代码19)

时间:2014-07-02 18:01:08

标签: android android-sqlite

这是我试图插入到我的表中的代码,并获得一个异常,即ShopName(COL_SN)列不是唯一的,虽然我提供的数据库中尚未存在该名称。该特定列是主要的表的关键

 public void insert(String sn,String skn,String sa,String un,String pwd) throws SQLiteConstraintException
        {
            sdb=this.getWritableDatabase();
             System.out.println("in insert method");
             //sdb.execSQL("insert into " + TABLE_ShopDetails + " values(" +sn+ "," +skn+ "," +sa+ "," +un+ "," +pwd+ ")");
             ContentValues cv=new ContentValues();
             cv.put(COL_SN,sn);
             cv.put(COL_SKN,skn);
             cv.put(COL_SA,sa);
             cv.put(COL_UN,un);
             cv.put(COL_PWD,pwd);
             sdb.insert(TABLE_ShopDetails,COL_SN,cv);
             sdb.insert(TABLE_ShopDetails,COL_SKN,cv);
             sdb.insert(TABLE_ShopDetails,COL_SA,cv);
             sdb.insert(TABLE_ShopDetails,COL_UN,cv);
             sdb.insert(TABLE_ShopDetails,COL_PWD,cv);
        }

3 个答案:

答案 0 :(得分:1)

只调用一次插入

sdb.insert(TABLE_ShopDetails,NULL,CV);

答案 1 :(得分:0)

您只应拨打insert()一次。

ContentValues对象已包含所有列的值。通过多次插入,您尝试创建重复记录,这会导致主键违规。

第二个参数可以为null,仅适用于特殊情况(当值为空时)。

答案 2 :(得分:0)

你肯定只需要调用一次插入,就像别人说的那样。第二个可选参数应该很可能为null,它适用于以下...

optional; may be null. SQL doesn't allow inserting a completely empty row without naming at least one column name. If your provided values is empty, no column names are known and an empty row can't be inserted. If not set to null, the nullColumnHack parameter provides the name of nullable column name to explicitly insert a NULL into in the case where your values is empty.

您也可以考虑设置内容提供商。下面的链接可以作为一个很好的教程。

Android SQLite database and content provider - Tutorial