Дублирование первичного ключа - PullRequest
0 голосов
/ 22 февраля 2012

Я проектирую форму, содержащую поля, и написал запрос как

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 голосов
/ 23 ноября 2013

Добавьте «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()));

База данных будет автоматически увеличивать ключ.Надеюсь, это поможет

0 голосов
/ 22 февраля 2012

Возможно, вы захотите добавить " AUTOINCREMENT " в ваш телефонный столбец. Это указывает базе данных автоматически увеличивать ключ для каждой новой строки.

db.execSQL("CREATE TABLE pdetails( phone INTEGER PRIMARY KEY AUTOINCREMENT ASC, fname TEXT, lname TEXT, gender TEXT, email TEXT, mainpin INTEGER)");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...