Урок 35. SQLite. Методы update и delete с указанием условия

Обсуждение уроков
Rover
Сообщения: 2
Зарегистрирован: 25 окт 2013, 13:24

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение Rover » 28 окт 2013, 05:15

У меня в приложении будет несколько Activity, поочередно работающих с базой данных.
Вопрос: когда я подключаюсь к БД в главной Activity, это подключение создается для приложения в целом или только для текущей Activity?
Т.е. надо ли переподключаться при смене Activity, и что происходит с текущим подключением, когда я перемещаюсь между разными активностями?

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение Isaev » 11 ноя 2013, 11:59

При создании таблицы через execSQL, если она уже существует, это вежливо сообщается в логе:
INFO/Database(6461): sqlite returned: error code = 1, msg = table newTable already exists
Как бы программно организовать эту проверочку?

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение trew » 11 ноя 2013, 13:27

Isaev писал(а):При создании таблицы через execSQL, если она уже существует, это вежливо сообщается в логе:
INFO/Database(6461): sqlite returned: error code = 1, msg = table newTable already exists
Как бы программно организовать эту проверочку?
несколько примеров, которые легко нагуглить.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение Foenix » 11 ноя 2013, 18:26

Isaev писал(а):При создании таблицы через execSQL, если она уже существует, это вежливо сообщается в логе:
INFO/Database(6461): sqlite returned: error code = 1, msg = table newTable already exists
Как бы программно организовать эту проверочку?
не верь сообщению выше.
http://www.sqlite.org/lang_createtable.html
используй
CREATE TABLE IF NOT EXISTS...........................
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

DmitryR
Сообщения: 2
Зарегистрирован: 15 ноя 2013, 12:23

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение DmitryR » 15 ноя 2013, 12:33

Здравствуйте, я новичок. Вопрос по уроку следующий:
Мы добавили новый edittext ID, куда вписываем ID для записи бд, но код при нажатии кнопки add у нас не поменялся. Т.е. я создаю запись с ID 3, а в базу все равно пишется запись с id 1.(база была пуста) Делаю новую запись с ID 7, но пишет в базу эту запись с Id 2. Однако в уроке создались записи с теми ID, которые были указаны в etID(3 и 4 соответственно). Чем это можно объяснить?

DmitryR
Сообщения: 2
Зарегистрирован: 15 ноя 2013, 12:23

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение DmitryR » 15 ноя 2013, 12:37

Updt. Кажется я понял, когда мы базу почистили с помощью clear счетчик id не сбросился, поэтому в уроке новые записи начинались с 3 и 4. Я же запустил приложение на другом эмуляторе и база создалась новая. Вопрос, а как сделать так, чтобы новые записи записывались с ID из edittext?

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение trew » 15 ноя 2013, 12:43

DmitryR писал(а):Updt. Кажется я понял, когда мы базу почистили с помощью clear счетчик id не сбросился, поэтому в уроке новые записи начинались с 3 и 4. Я же запустил приложение на другом эмуляторе и база создалась новая. Вопрос, а как сделать так, чтобы новые записи записывались с ID из edittext?
[syntax=java]db.execSQL("create table mytable ("
+ "id integer primary key autoincrement,"
+ "name text,"
+ "email text" + ");");[/syntax]
autoincrement- говорит о том, что компьютер будет вставлять значения по порядку, в это поле.
Если хотите самостоятельно его заполнять, тогда при создании таблицы нужно написать:
id integer primary key
т.е. без autoincrement
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение Foenix » 15 ноя 2013, 12:47

даже если и автоинкремент, все равно можно указывать свои id.
И второе.. иногда лучше на вопрос вовсе не отвечать. ПО-моему, из вопросов как такой следует, что человек просто скопировал код с урока и даже не потрудился вдуматься в то, что там между блоками кода написано.

Не торопитесь, trew. Иной раз вы скорым предложением кода не делаете человеку лучше..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Mamapapa
Сообщения: 7
Зарегистрирован: 10 окт 2013, 15:55

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение Mamapapa » 17 ноя 2013, 15:18

Где можно по подробнее прочитать про условия для upgrade?

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение trew » 17 ноя 2013, 15:20

Mamapapa писал(а):Где можно по подробнее прочитать про условия для upgrade?
Например в уроке 39.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение sae74 » 11 дек 2013, 12:22

Добрый день.
столкнулся с проблемой обновления всех строк в таблице по определенному условию:

Код: Выделить всё

sqlQuery = "UPDATE JURNAL_N SET _id_New_Old= 2 WHERE JURNAL_N._id_New_Old =1";
db.zapros_update(sqlQuery);	
public void zapros_update(String sqlQuery) {
mDB.rawQuery(sqlQuery, null);
}
Сам запрос в редакторе SQL на базе отрабатывает, а на андроиде не чего не происходит, ошибок не выдает.
Где я туплю?

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение sae74 » 11 дек 2013, 12:47

Я так понимаю что mDB.rawQuery(sqlQuery, null) - возвращает курсор, а что мне тогда нужно использовать?

P.S.

Нужно было просто подумать.......
и использовать mDB.execSQL(sqlQuery);

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение Foenix » 11 дек 2013, 13:09

используй http://developer.android.com/reference/ ... ml#execSQL(java.lang.String, java.lang.Object[])
и вообще разберись с данными, выведи запрос в лог, проведи его на тех же самых данных, что и в устройстве (эмуляторе). Неизвестно что у тебя там происходит.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение sae74 » 11 дек 2013, 13:21

Foenix писал(а):используй.......
Сам спросил, сам ответил....
Пост выше.

Нужно было использовать mDB.execSQL(sqlQuery);

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение alexmx » 06 май 2014, 19:03

Доброго времени суток

написал метод удаления строк:

[syntax=java]public int delete(String namedell){
int col;
return col = getWritableDatabase().delete(TIME_TABLE, NUM_DET + "=" + namedell, null);
}[/syntax]

Ругается на синтаксис:
05-06 15:47:06.856: E/AndroidRuntime(739): android.database.sqlite.SQLiteException: near ".182": syntax error (code 1): , while compiling: DELETE FROM tiemtable WHERE numdet=14016.45.182

Это как понять?

Аватара пользователя
Leeroy
Сообщения: 67
Зарегистрирован: 12 дек 2013, 21:25

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение Leeroy » 06 май 2014, 20:13

alexmx писал(а):Доброго времени суток

написал метод удаления строк:

[syntax=java]public int delete(String namedell){
int col;
return col = getWritableDatabase().delete(TIME_TABLE, NUM_DET + "=" + namedell, null);
}[/syntax]

Ругается на синтаксис:
05-06 15:47:06.856: E/AndroidRuntime(739): android.database.sqlite.SQLiteException: near ".182": syntax error (code 1): , while compiling: DELETE FROM tiemtable WHERE numdet=14016.45.182

Это как понять?
Что-то с форматом namedell
Какой формат у NUM_DET ?

Немного красивший вариант

Код: Выделить всё

public boolean deleteRow(String nameDell) 
{
    db.delete(TIME_TABLE, NUM_DET + "=" + nameDell, null) > 0;
}
Java Core -> JDBC -> GoF -> Android SDK ->...
Телепрограмма в твоем смарте Телепрограмма

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение Foenix » 06 май 2014, 20:34

в кавычках пиши
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение alexmx » 06 май 2014, 20:46

Что-то с форматом namedell
Какой формат у NUM_DET ?
[syntax=java]static final String NUM_DET = "numdet";[/syntax]


В общем задача немного другая: я суммирую строки в запросе и хочу получить количество сложенных строк в группе пошарив ни чего не нашел, вот и решил получать количество через удаление

Тут произвожу операцию:
[syntax=java] int col;
c = db.query();
while (c.moveToNext()) {
idname = c.getInt(c.getColumnIndex(TIME_ID));
name = c.getString(c.getColumnIndex(NUM_DET));
sG0 = c.getDouble(c.getColumnIndex(COMMAND_G0));
sG1 = c.getDouble(c.getColumnIndex(COMMAND_G1));
sG1v = c.getDouble(c.getColumnIndex(COMMAND_G1_V));
sG1n = c.getDouble(c.getColumnIndex(COMMAND_G1_N));
sG94 = c.getDouble(c.getColumnIndex(COMMAND_G94));
sG23 = c.getDouble(c.getColumnIndex(COMMAND_G23));
sG23v = c.getDouble(c.getColumnIndex(COMMAND_G23_V));
sG23n = c.getDouble(c.getColumnIndex(COMMAND_G23_N));
System.out.println(name + " " + sG0 + " " + sG1 + " " + sG94 + " " + sG23);

col = db.delete(name);
System.out.println("delete");
}[/syntax]

Метод суммирующего запроса:
[syntax=java]public Cursor query(){
columns = new String[]{"_id", "numdet", "sum(g0) as g0", "sum(g1) as g1", "sum(g1v) as g1v",
"sum(g1n) as g1n", "sum(g94) as g94", "sum(g23) as g23", "sum(g23v) as g23v", "sum(g23n) as g23n"};
groupBy = "numdet";
return getWritableDatabase().query(TIME_TABLE, columns, null, null, groupBy, null, null);
}[/syntax]
Метод отдающего количество строк:
[syntax=java]public int delete(String namedell){
int col;
return col = getWritableDatabase().delete(TIME_TABLE, NUM_DET + "=" + namedell, null);
}[/syntax]

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение Foenix » 06 май 2014, 21:03

ничего не поняла. Что ты удаляешь??
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Сообщение alexmx » 06 май 2014, 21:23

я удаляю строки содержащие одинаковое значение поля NUM_DET
значение этого поля переменная namedell

Ответить