重复主键

时间:2012-02-22 18:25:33

标签: android sqlite

我正在设计一个包含字段的表单,并将查询编写为

db.execSQL("CREATE TABLE pdetails( phone INTEGER PRIMARY KEY ASC, fname TEXT, lname TEXT, gender TEXT, email TEXT,  mainpin INTEGER)");

当我单击提交按钮时,数据插入数据库,但问题是数据是否插入了重复的主键。你能解决我的问题吗? 我的插入代码是:

                long flag = 0;
                int id = 1;
                SQLiteDatabase db = helper.getWritableDatabase();
                Cursor cursor = db.query("pdetails", new String[]{"count(*) phone"}, null, null, null, null, null);
                while(cursor.moveToNext())
                {
                    int idFromDatabase = cursor.getInt(cursor.getColumnIndex("phone"));
                    if(idFromDatabase != 0)
                    {
                        id = 1 + idFromDatabase;
                    }
                }
                ContentValues values = new ContentValues();
                //values.put("ID", id);
                values.put("fname", fnametxt.getText().toString().trim());
                values.put("lname", lnametxt.getText().toString().trim());
                if(male.isChecked())
                {
                    values.put("gender","male");
                }
                else
                values.put("gender", "Female");
                values.put("email", emailtxt.getText().toString());
                values.put("phone", Integer.parseInt(phone.getText().toString()));
                values.put("mainpin", mainpin.toString());
                flag = db.insert("pdetails", null, values);
                if(flag != -1)
                {
                    Toast toast = Toast.makeText(getApplicationContext(), "You have successful inserted this record into database! "+flag, Toast.LENGTH_LONG); 
                    toast.show();
                    db.close();
                    return;
                }
                else
                {
                    Toast toast = Toast.makeText(getApplicationContext(), "An error occured when insert this record into database!", Toast.LENGTH_LONG); 
                    toast.show();
                    db.close();
                    return;
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

您可能想在手机栏中添加“AUTOINCREMENT”。这告诉数据库自动增加每个新行的密钥。

db.execSQL("CREATE TABLE pdetails( phone INTEGER PRIMARY KEY AUTOINCREMENT ASC, fname TEXT, lname TEXT, gender TEXT, email TEXT, mainpin INTEGER)");

答案 1 :(得分:0)

将“UNIQUE”添加到您的手机中......在此,您可以避免重复按键

db.execSQL("CREATE TABLE pdetails( phone INTEGER PRIMARY KEY UNIQUE NOT NULL, fname TEXT, lname TEXT, gender TEXT, email TEXT, mainpin INTEGER)");

或者如果你想添加AUTOINCREMENT,那么就不需要这行了

        values.put("phone", Integer.parseInt(phone.getText().toString()));

数据库会自动增加密钥。 希望这有帮助