целочисленный первичный ключ не автоинкрементный - PullRequest
0 голосов
/ 23 февраля 2012

У меня проблема с SQLite и целым полем автоинкремента первичного ключа.Я знаю, что могу получить идентификатор, вызвав столбец ROWID, но мне нужен _id.

Вот мой запрос для создания моей таблицы:

private static final String TABLE_FACEBOOK_IMPORTED_CONTACTS = "facebook_imported_contacts";
    private static final String COL_ID = "_id";
    private static final String COL_FACEBOOK_ID = "facebookId";
    private static final String COL_PHONE_CONTACT_ID = "phoneContactId";
    private static final String COL_FIRST_NAME = "firstName";
    private static final String COL_LAST_NAME= "lastName";
    private static final String COL_BIRTH_DATE = "birthDate";
    private static final String COL_GROUP = "contactGroup";
    private static final String COL_MAIL_ADDRESS = "mailAddress";
    private static final String COL_PHONE_NUMBER = "phoneNumber";



    public static final String CREATE_FACEBOOK_IMPORT_BDD = "" +
            "CREATE TABLE "+TABLE_FACEBOOK_IMPORTED_CONTACTS+" ("+
            COL_ID + " integer primary key autoincrement," +
            COL_FACEBOOK_ID +" INT," +
            COL_PHONE_CONTACT_ID +" INT, " +
            COL_FIRST_NAME +" TEXT NOT NULL," +
            COL_LAST_NAME +" TEXT NOT NULL, " +
            COL_BIRTH_DATE +" TEXT," +
            COL_GROUP +" TEXT," +
            COL_MAIL_ADDRESS +" TEXT," +
            COL_PHONE_NUMBER +" TEXT);";

Так что у меня нет сообщения об ошибке,Все работает за исключением ... что поле COL_ID (_id) не увеличивается автоматически.Вот остальная часть кода:

 public class FacebookContactDAO {
    private static final int DB_VERSION = 1;
    private static final String DB_NAME = "automatic_sms.db";

    private static final String TABLE_FACEBOOK_IMPORTED_CONTACTS = "facebook_imported_contacts";
    private static final String COL_ID = "_id";
    private static final int NUM_COL_ID = 0;

    private static final String COL_FACEBOOK_ID = "facebookId";
    private static final int NUM_COL_FACEBOOK_ID = 1;

    private static final String COL_PHONE_CONTACT_ID = "phoneContactId";
    private static final int NUM_COL_PHONE_CONTACT_ID = 2;

    public static final String COL_FIRST_NAME = "firstName";
    private static final int NUM_COL_FIRST_NAME = 3;

    public static final String COL_LAST_NAME= "lastName";
    private static final int NUM_COL_LAST_NAME = 4;

    private static final String COL_BIRTH_DATE = "birthDate";
    private static final int NUM_COL_BIRTH_DATE = 5;

    private static final String COL_GROUP = "contactGroup";
    private static final int NUM_COL_GROUP = 6;

    private static final String COL_MAIL_ADDRESS = "mailAddress";
    private static final int NUM_COL_MAIL_ADDRESS = 7;

    private static final String COL_PHONE_NUMBER = "phoneNumber";
    private static final int NUM_COL_PHONE_NUMBER = 8;

    private SQLiteDatabase database;
    private SQLiteDB mySQLiteDB;



    public FacebookContactDAO(Context context){
        //On créer la BDD et sa table
        mySQLiteDB = new SQLiteDB(context, DB_NAME, null, DB_VERSION);
    }

    public void open(){
        database = mySQLiteDB.getWritableDatabase();
        //database.execSQL("DROP TABLE " + TABLE_FACEBOOK_IMPORTED_CONTACTS + ";");
        //database.execSQL(SQLiteDB.CREATE_FACEBOOK_IMPORT_BDD);
    }

    public void close(){
        database.close();
    }

    public SQLiteDatabase getDB(){
        return database;
    }

    public long insert(FacebookContact contact){


        ContentValues contactValues = new ContentValues();

        contactValues.put(COL_FACEBOOK_ID, contact.getFacebookId());
        contactValues.put(COL_PHONE_CONTACT_ID, contact.getPhoneContactId());
        contactValues.put(COL_FIRST_NAME, contact.getFirstName());
        contactValues.put(COL_LAST_NAME, contact.getLastName());
        contactValues.put(COL_BIRTH_DATE, contact.getBirthDate());
        contactValues.put(COL_GROUP, contact.getGroup());
        contactValues.put(COL_MAIL_ADDRESS, contact.getMailAddress());
        contactValues.put(COL_PHONE_NUMBER, contact.getPhoneNumber());

        return database.insert(TABLE_FACEBOOK_IMPORTED_CONTACTS, null, contactValues);
    }

    public int update(int id, FacebookContact contact){
        ContentValues contactValues = new ContentValues();
        //contactValues.put(COL_ID, contact.getId()); // (shouldn't be able to change the id)
        contactValues.put(COL_FACEBOOK_ID, contact.getFacebookId());
        contactValues.put(COL_PHONE_CONTACT_ID, contact.getPhoneContactId());
        contactValues.put(COL_FIRST_NAME, contact.getFirstName());
        contactValues.put(COL_LAST_NAME, contact.getLastName());
        contactValues.put(COL_BIRTH_DATE, contact.getBirthDate());
        contactValues.put(COL_GROUP, contact.getGroup());
        contactValues.put(COL_MAIL_ADDRESS, contact.getMailAddress());
        contactValues.put(COL_PHONE_NUMBER, contact.getPhoneNumber());

        return database.update(TABLE_FACEBOOK_IMPORTED_CONTACTS, contactValues, COL_ID + " = " +id, null);
    }

    public int remove(long facebookId){
        //Suppression d'un livre de la BDD grâce à l'ID
        return database.delete(TABLE_FACEBOOK_IMPORTED_CONTACTS, COL_FACEBOOK_ID + " = " +facebookId, null);
    }
    public int removeEverything(){
        //Suppression d'un livre de la BDD grâce à l'ID
        return database.delete(TABLE_FACEBOOK_IMPORTED_CONTACTS, "1 = 1", null);
    }

    public FacebookContact getByFacebookId(long facebookId) {

        Cursor queryResult = database.query(    TABLE_FACEBOOK_IMPORTED_CONTACTS,
                                    new String[] {COL_ID,COL_FACEBOOK_ID, COL_PHONE_CONTACT_ID, COL_FIRST_NAME,COL_LAST_NAME,COL_BIRTH_DATE,COL_GROUP,COL_MAIL_ADDRESS,COL_PHONE_NUMBER},
                                    COL_FACEBOOK_ID + " = " + facebookId + "",
                                    null, null, null, null);
        FacebookContact contact = cursorToFacebookContact(queryResult);
        queryResult.close();

        return contact;
    }

    public Cursor getAll() {

        Cursor queryResult = database.query(    TABLE_FACEBOOK_IMPORTED_CONTACTS,
                                    new String[] {COL_ID,COL_FACEBOOK_ID, COL_PHONE_CONTACT_ID, COL_FIRST_NAME,COL_LAST_NAME,COL_BIRTH_DATE,COL_GROUP,COL_MAIL_ADDRESS,COL_PHONE_NUMBER},
                                    "1",
                                    null, null, null, COL_LAST_NAME+","+COL_FIRST_NAME);

        //FacebookContact contact = cursorToFacebookontact(queryResult);
        //queryResult.close();
        return queryResult;
    }


    private FacebookContact cursorToFacebookContact(Cursor c){
        if (c.getCount() == 0)
            return null;

        c.moveToFirst();

        FacebookContact contact = new FacebookContact();

        contact.setId(c.getInt(NUM_COL_ID));
        contact.setFacebookId(c.getInt(NUM_COL_FACEBOOK_ID));
        contact.setPhoneContactId(c.getInt(NUM_COL_PHONE_CONTACT_ID));
        contact.setFirstName(c.getString(NUM_COL_FIRST_NAME));
        contact.setLastName(c.getString(NUM_COL_LAST_NAME));
        contact.setBirthDate(c.getString(NUM_COL_BIRTH_DATE));
        contact.setGroup(c.getString(NUM_COL_GROUP));
        contact.setMailAddress(c.getString(NUM_COL_MAIL_ADDRESS));
        contact.setPhoneNumber(c.getString(NUM_COL_PHONE_NUMBER));

        c.close();

        return contact;
    }

}

Возможно, проблема связана с приватным FacebookContact cursorToFacebookContact.

Если вам нужна какая-либо информация, сообщите мне!

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 08 августа 2014

удалить автоинкремент

убедитесь, что в вашем классе модели есть переменная и оба метода get и set

- в модальном классе ---

 public int getId(){
      return this._id;
    }


public void setId(int id){
        this._id= id;
    }

эти дваметоды обязательны в классе вашей модели

проверьте, создана ли ваша таблица, как следующий код SQL:

private static final String CREATE_CATEGORY_TABLE=
            "CREATE TABLE "+CATEGORY_TABLE+"("
                    +CAT_ID+" INTEGER PRIMARY KEY ,  "
                    +CATEGORY+" TEXT, "
                    + DESCRIPTION+" TEXT, "
                    +CAT_TYPE+" TEXT)";

У меня есть CAT_ID= _id declared;

, вам не нужно добавлятьполе в вашем методе добавления DatabaseManager.

, но вам нужно установить id для возврата списка значений из менеджера баз данных, как;

public ArrayList<Category> getCategory(){
        ArrayList<Category> listofCat= new ArrayList<Category>();
        String selquery="SELECT * FROM "+CATEGORY_TABLE;
        SQLiteDatabase db= this.getReadableDatabase();
        Cursor cursor= db.rawQuery(selquery,null);

        if(cursor.moveToFirst()){
            do{
                Category category= new Category();
                category.setId(cursor.getInt(cursor.getColumnIndex(CAT_ID)));
                category.setCatName(cursor.getString(cursor.getColumnIndex(CATEGORY)));
                category.setCatDesc(cursor.getString(cursor.getColumnIndex(DESCRIPTION)));
                category.setCatType(cursor.getString(cursor.getColumnIndex(CAT_TYPE)));

                listofCat.add(category);
            }while (cursor.moveToNext());

        }
        cursor.close();
        return listofCat;

, этот метод возвращает список категорий в моем контексте.

переставьте код таким образом, чтобы он работал.

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

Я думаю, что вашему ключевому слову autoincrement нужно подчеркнуть, например: auto_increment

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...