Android SQLite INSERT OR IGNORE не работает - PullRequest
5 голосов
/ 03 августа 2011

Почему оператор IGNORE не работает?Каждый раз, когда я запускаю это, одно и то же значение было вставлено в базу данных, и я не знаю почему?

        myDB = this.openOrCreateDatabase(MY_DB_NAME, MODE_PRIVATE, null);
        myDB.execSQL("INSERT OR IGNORE INTO " + MY_DB_TABLE + "(db_datum, db_zahlen, db_scheine)" 
                +"VALUES ('"+datum+"',"+
                "'"+zahlen+"',"+
                "'"+9+"');");

db схема:

  • db_datum (varchar (100))

  • db_zahlen (varchar (100))

  • db_scheine (целое)

Iиметь 2 строки "datum" и "zahlen" и хотел бы вставить их в базу данных.Теперь проблема в том, что если те же строки уже есть в БД и код выполняется снова, их можно игнорировать и никогда не вставлять снова.

Ответы [ 2 ]

14 голосов
/ 24 января 2012

Вы можете использовать insertWithOnConflict.Пример:

mDb.insertWithOnConflict(DATABASE_TABLE, null, initialValues, SQLiteDatabase.CONFLICT_IGNORE);
2 голосов
/ 03 августа 2011

Вы не должны использовать execSQL для выполнения команды INSERT (проверьте документы).

Используйте вместо myDB.insertOrThrow(...):

ContentValues cv = new ContentValues();
cv.put("db_datum", datum);
cv.put("db_zahlen", zahlen);
cv.put("db_scheine", 9);
myDB.insertOrThrow(MY_DB_TABLE, null, cv);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...