Insert Android SQLIte работает частично

155
28 декабря 2019, 06:40

После исправления мой метод работал, но не все. Никакая ошибка нету. Вот мой код:

DBHelper(Context context) {
    super(context, "Samo.db", null, 1);
    SQLiteDatabase db = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table if not exists incomes(id integer primary key autoincrement, name integer, price real," +
            "quantity integer, provider integer, waybill integer, date text) ");
    db.execSQL("create table if not exists outgoe(id integer primary key autoincrement, name integer, " +
            "quantity integer, recipient integer, date text)");
    db.execSQL("create table if not exists goods(id integer primary key autoincrement, name text, unit integer)");
    db.execSQL("create table if not exists exist(id integer primary key autoincrement, name integer, quantity)");
    db.execSQL("create table if not exists providers(id integer primary key autoincrement, name text)");
    db.execSQL("create table if not exists units(id integer primary key autoincrement, unit text)");
    db.execSQL("create table if not exists recipients(id integer primary key autoincrement, name text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    onCreate(db);
}
void insertToIncomes(String name, String price, String unit, String quantity, String provider, String waybill, String date) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    ContentValues cv2 = new ContentValues();
    ContentValues cv3 = new ContentValues();
    Cursor cursor = db.rawQuery("select id from goods where name like '" + name + "'", null);
    if (cursor != null && cursor.moveToFirst())
        cv.put("name", cursor.getInt(0));
    else {
        cv2.put("name", name);
        cursor = db.rawQuery("select id from units where unit like '" + unit + "'", null);
        if (cursor != null && cursor.moveToFirst())
            cv2.put("unit", cursor.getInt(0));
        else {
            cv3.put("unit", unit);
            db.insert("units", null, cv3);
            cursor = db.rawQuery("select count(*) from units ", null);
            cv2.put("unit", cursor.getCount());
        }
        db.insert("goods", null, cv2);
        cursor = db.rawQuery("select count(*) from goods ", null);
        cv.put("name", cursor.getCount());
        cv2.clear();
        cv3.clear();
    }
    cv.put(price, Double.parseDouble(price));
    cv.put("quantity", Integer.parseInt(quantity));
    cursor = db.rawQuery("select id from providers where name like '" + provider + "'", null);
    if (cursor != null && cursor.moveToFirst())
        cv.put("provider", cursor.getInt(0));
    else {
        cv2.put("name", name);
        db.insert("provider", null, cv2);
        cursor = db.rawQuery("select count(*) from  providers", null);
        if (cursor != null && cursor.moveToFirst())
            cv.put("provider", cursor.getCount());
    }
    cv.put("waybill", waybill);
    cv.put("date", date);
    db.insert("incomes", null, cv);
    cursor.close();
}

Он добавляет строки только в goods и units. Проверил через SQLite Manager

Answer 1

Он добавляет строки только в goods и units.

Естественно. У Вас таблица называется providers, а Вы добавляете запись в таблицу provider, которой не существует.

Попробуйте так:

db.insert("providers", null, cv2);

Никакая ошибка нету

В случае ошибки метод insert возвращает значение -1. Поэтому имеет смысл проверять значение, которое метод возвращает после операции. Например, так:

if (db.insert("providers", null, cv2) == -1){
    // Здесь обрабатываем ошибку.
}
READ ALSO
Игнорирование имени пакета при запуске java из командной строки

Игнорирование имени пакета при запуске java из командной строки

Мне приходит файл с исходным кодом Java класса, например:

147
log4j блокирует поток

log4j блокирует поток

Tomcat-6 крутится на windows server 2016, на нем развернуто веб-приложение, для логирования использован Log4j 12

138
Как обновить одну строку в SQLite?

Как обновить одну строку в SQLite?

Всем приветСтолкнулся с новой проблемой, которую не могу решить

148
Как получить доступ к приватным полям

Как получить доступ к приватным полям

Не получается получить доступ к приватны полям

128