База данных sqlite перезаписывает существующую запись, а не вставляет новую запись в физическое устройство - PullRequest
0 голосов
/ 28 октября 2018

Я сталкиваюсь с проблемой, когда не могу вставить новую запись в таблицу, скорее она перезаписывает первую запись в таблице.

Это происходит на физическом устройстве, где оно нормально работает в эмуляторе.

Ниже приведен код, используемый для вставки записи:

Date date = new Date();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss", Locale.getDefault());
            String strDate = formatter.format(date);

            //SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING);

            SQLiteDatabase db = this.getWritableDatabase();
            /*ContentValues values = new ContentValues();
            //values.put("UserId",1);
            values.put("NoQPassed", scoreValues.get("NoPassed"));
            values.put("NoQFailed", scoreValues.get("NoFailed"));
            values.put("NoQSkipped", scoreValues.get("NoSkipped"));
            values.put("SubjectName", scoreValues.get("strSubjectName"));
            values.put("CompletedDateTime", strDate);
            intRetVal= db.insert(score_Table_Name, null, values);*/

            String strQuery="insert into "+score_Table_Name+" values ('"+strDate+"','"+scoreValues.get("NoPassed")+
                    "','"+scoreValues.get("NoFailed")+"','"+scoreValues.get("NoSkipped")+"','"+scoreValues.get("strSubjectName")+"')";
            db.execSQL(strQuery);
            db.close();

Пробная вставка с использованием db.insert и db.executeSQL , но ни одинПомогите.Может ли кто-нибудь помочь мне, где я иду не так?

Я не добавил ни первичный ключ, ни ключ автоинкремента, чтобы убедиться, что конфликт не из-за этого столбца.Всегда ли нам нужен первичный ключ для вставки новой записи?

1 Ответ

0 голосов
/ 28 октября 2018

Вы можете использовать ниже метод getCount () для подсчета вхождений.if getCount(name)== 0 тогда сделайте вставку.в противном случае не вставляйте и попробуйте войти.

public int getCount(String name) {
    Cursor c = null;
    try {
        db = Dbhelper.getReadableDatabase();
        String query = "select count(*) from TableName where name = ?";
        c = db.rawQuery(query, new String[] {name});
        if (c.moveToFirst()) {
            return c.getInt(0);
        }
        return 0;
    }
    finally {
        if (c != null) {
            c.close();
        }
        if (db != null) {
            db.close();
        }
    }
}

Но эта логика может быть недействительной, если вы говорите, что переопределяете ее.Я думаю, что нет возможности переопределить в этом Android-sqlite.Пожалуйста, отметьте , вы можете удалить свою базу данных в любом месте, прежде чем вставлять новую запись .Это может показаться переопределением данных

...