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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Dark-VIN
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 66
#1

SQlite Insert, delete, update - Программирование Android

25.06.2016, 10:13. Просмотров 203. Ответов 3

Добрый день.
Возник такой вопрос.
Есть база с таблицей 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
Посмотрите здесь:

SQLite как получить номер записи из INSERT - Программирование Android
Собственно САБЖ. Не знаю команды. Уже все перерыл! :( Есть база с id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT Добавляю новую запись и...

Разобраться с Delete View - Программирование Android
Разобрался с Add View if (resultCode == RESULT_OK) { editTitle = data.getStringExtra("keyEditTitle"); ...

ListView + SQLite - Программирование Android
Привет. Взял код из урока 52 на startandroid, немного его изменил public class DB { private static final String DB_NAME =...

Не создается DB SQLite - Программирование Android
Люди добрые, подскажите что не так в коде package com.gufa.myalarm2.alarmclock; import android.content.ContentProvider; import...

Listener SQLite - Программирование Android
Если какой нибудь стандпртный слушатель изменений в SQLite android. Ну например добавили или удалили что нибудь из базы данных и он в этот...

Категории в SQLite - Программирование Android
Всем привет, есть у кого идеи как организовать категории картинок в listview? то есть при нажатии на определённую категорию в listview,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Frozik6k
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 50
25.06.2016, 17:00     SQlite Insert, delete, update #2
создай одной строкой json, и сохраняй ее с помощью SharedPreferences
Dark-VIN
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 66
25.06.2016, 17:05  [ТС]     SQlite Insert, delete, update #3
Цитата Сообщение от Frozik6k Посмотреть сообщение
сохраняй ее с помощью SharedPreferences
Я уже так делал. Решил все таки хранить все в БД.
Ну раз причесать код не удается. Пусть будет, как есть. И так работает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2016, 19:14     SQlite Insert, delete, update
Еще ссылки по теме:

Кириллица в SQLite - Программирование Android
Пишу Android приложение на Java, которое будет использовать базу данных SQLite , однако возникла проблема с восприятием приложением...

CursorLoader+SQLite - Программирование Android
Добрый день! подскажите пожалуйста какого вида должны быть следующие строки в которых использовался Cursor, если пользоваться...

SQLite запрос - Программирование Android
Здраствуйте, у мене есть таблица events... там есть поле action_date, в етом поле дата и время в секундах, я не знаю как мне написать...

ID в SQLite генерятся не с 0 а с 1; - Программирование Android
Всем доброго времени суток. Извиняюсь за возможно глупый и нубский вопрос). Возникла следующая проблема. При записи данных в таблицу,...

Шифрование SQLite - Программирование Android
Гуру, помогите! Кому-нибудь из Вас это удавалось??? Или хотя-бы слышали про такие НАДЕЖНЫЕ решения? Надо гарантированно защитить...

Android и sqlite - Программирование Android
Вечер добрый, товарищи! Вопрос такой: как быстро считывать и передавать большое кол-во данных между приложением и БД? Речь идёт о...


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

Или воспользуйтесь поиском по форуму:
XRoy
852 / 702 / 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
Ответ Создать тему
Опции темы

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