Форум программистов, компьютерный форум CyberForum.ru

SQlite Insert, delete, update - Android

Войти
Регистрация
Восстановить пароль
 
Dark-VIN
 Аватар для Dark-VIN
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 66
25.06.2016, 10:13     SQlite Insert, delete, update #1
Добрый день.
Возник такой вопрос.
Есть база с таблицей MailSettings. Она пустая. При первом сохранении настроек, все понятно (Insert).

В этой таблице всегда должен быть один ряд:
ID = 1, user = some_user, sender = some_sender, pass = some_pass, smtp = some_smtp, port = some_port, receiver = some_receiver

Как реализовать в одном методе и создание и перезапись единственной записи?

Мой костыль выглядит так:
onCreate

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    @Override
    public void onCreate(SQLiteDatabase db) {
 
        db.execSQL("CREATE TABLE IF NOT EXISTS MailSettings (" +
                "id INTEGER NOT NULL PRIMARY KEY," +
                "user TEXT," +
                "sender TEXT," +
                "pass TEXT," +
                "smtp TEXT," +
                "port TEXT," +
                "receiver TEXT);"
        );
 
    }

Загрузка настроек почты

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    public String[] loadMailSettings() {
        String[] result = new String[6];
 
        SQLiteDatabase sqLiteDatabase = getReadableDatabase();
        Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM MailSettings", null);
 
        if (cursor.moveToFirst()) {
            int userColIndex = cursor.getColumnIndex("user");
            int senderColIndex = cursor.getColumnIndex("sender");
            int passColIndex = cursor.getColumnIndex("pass");
            int smtpColIndex = cursor.getColumnIndex("smtp");
            int portColIndex = cursor.getColumnIndex("port");
            int receiverColIndex = cursor.getColumnIndex("receiver");
            do {
                result[0] = cursor.getString(userColIndex);
                result[1] = cursor.getString(senderColIndex);
                result[2] = cursor.getString(passColIndex);
                result[3] = cursor.getString(smtpColIndex);
                result[4] = cursor.getString(portColIndex);
                result[5] = cursor.getString(receiverColIndex);
            } while (cursor.moveToNext());
 
        }
        cursor.close();
        sqLiteDatabase.close();
        return result;
    }

Сохранение настроек почты

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public void saveMailSettings(String[] settings) {
        SQLiteDatabase sqLiteDatabase = getWritableDatabase();
 
        sqLiteDatabase.delete("MailSettings", null, null);
 
        contentValues.put("user", settings[0]);
        sqLiteDatabase.insert("MailSettings", null, contentValues);
        contentValues.put("sender", settings[1]);
        sqLiteDatabase.insert("MailSettings", null, contentValues);
        contentValues.put("pass", settings[2]);
        sqLiteDatabase.insert("MailSettings", null, contentValues);
        contentValues.put("smtp", settings[3]);
        sqLiteDatabase.insert("MailSettings", null, contentValues);
        contentValues.put("port", settings[4]);
        sqLiteDatabase.insert("MailSettings", null, contentValues);
        contentValues.put("receiver", settings[5]);
        sqLiteDatabase.insert("MailSettings", null, contentValues);
 
        sqLiteDatabase.close();
    }

Хоть так и работает, но все же можно ли как-то сократить код (навести красоту), убрать циклы четения (если возможно) и.т.д.

Если заменить insert на update по ID, будет ругаться. и это понятно, потому что изначально нет в таблице ничего.
А делать дополнительную проверку, пустая таблица или нет, будет только усложнять код.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2016, 10:13     SQlite Insert, delete, update
Посмотрите здесь:

Android SQLite
SQLite как получить номер записи из INSERT Android
Android и sqlite Android
SQLite и libGDX Android
Разобраться с Delete View Android
Android SQLite
Android RecyclerView и SQLite
SQLite Android
Android SQLite
SQLite Android Android
Android SQLite
RecyclerView и SQLite Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Frozik6k
 Аватар для Frozik6k
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 50
25.06.2016, 17:00     SQlite Insert, delete, update #2
создай одной строкой json, и сохраняй ее с помощью SharedPreferences
Dark-VIN
 Аватар для Dark-VIN
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 66
25.06.2016, 17:05  [ТС]     SQlite Insert, delete, update #3
Цитата Сообщение от Frozik6k Посмотреть сообщение
сохраняй ее с помощью SharedPreferences
Я уже так делал. Решил все таки хранить все в БД.
Ну раз причесать код не удается. Пусть будет, как есть. И так работает.
XRoy
848 / 698 / 217
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
25.06.2016, 19:14     SQlite Insert, delete, update #4
Dark-VIN,
SQL
1
INSERT OR REPLACE INTO ...
Yandex
Объявления
25.06.2016, 19:14     SQlite Insert, delete, update
Ответ Создать тему

Метки
java android, sqlite
Опции темы

Текущее время: 04:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru