@pmozil

Почему добавление строки в БД методом insert в Android, возвращает ID строки -1?

Тело метода OnClick:
ContentValues cv = new ContentValues();
        String sum = tvSum.getText().toString();
        String sp = spinner.getSelectedItem().toString();

        SQLiteDatabase db = dbHelper.getWritableDatabase();

        cv.put("suma",sum);
        cv.put("valuta",sp);
   

        long rowID = db.insert("mytable", null, cv);
       
         Log.d(TAG, "row inserted, ID = " + rowID);  //в этом месте rowID равен -1 
//и база данных остается пустой


        Cursor c = db.query("mytable", null, null, null, null, null, null);

        if (c.moveToFirst()) {

            int idColIndex = c.getColumnIndex("id");
            int sumColIndex = c.getColumnIndex("suma");
            int valColIndex = c.getColumnIndex("valuta");
            do {
                Log.d(TAG,
                        "ID = " + c.getInt(idColIndex) +
                                ", suma = " + c.getString(sumColIndex) +
                                ", valuta = " + c.getString(valColIndex));
            } while (c.moveToNext());
        } else
            Log.d(TAG, "0 rows"); // и естественно я вижу только "0 rows",так как moveToFirst() 
//не нашел ни одной записи.
        c.close();


    }

    class DBHelper extends SQLiteOpenHelper {

        public DBHelper(Context context) {
            super(context, "myDB", null, 1);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            Log.d(TAG, "--- onCreate database ---");
            db.execSQL("create table mytable ("
                    + "id integer primary key autoincrement,"
                    + "suma text,"
                    + "valuta text" + ");");
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        }
    }

Я не пойму,то ли запись не добавляется,так как не работает insert?Или же ошибка в другой части кода?
Помогите мне пожалуйста найти ошибку,а то уже второй день мучаюсь.
Заранeе спасибо.
  • Вопрос задан
  • 432 просмотра
Пригласить эксперта
Ответы на вопрос 1
orcDamnar
@orcDamnar
Java, C/C++, Android SDK
при записи в бд необходимо гарантировать то, что работа с бд происходит из одного потока. Рекомендую вам сделать SingleInstance для хелпера и получать инстанс writable database через getInstance() кроме того, попробуйте запихнуть insert в транзакцию. И еще, если вы создаете "id integer primary key autoincrement," то должно быть _id вместо id.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы