update одного поля

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Аватара пользователя
walle
Сообщения: 28
Зарегистрирован: 28 авг 2013, 10:10

update одного поля

Сообщение walle » 15 ноя 2013, 12:18

Добрый день.
Как мне обновить одно поле в записи оставив остальные поля без изменения?

как-то так работать не желает
[syntax=java5]
String strUPDATE = "UPDATE tbl SET field = false WHERE _id = 1";
db.execSQL(strUPDATE);
[/syntax]

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

Re: update одного поля

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

что значит "не хочет"? Поясни
И что значит false? в sqite полей с таким значением нет
R.id.team

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

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

Re: update одного поля

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

WHERE _id = 1
означает что нужно обновить поле, у которого _id = 1 (где _id - это имя столбца, а 1 - это его значение)

Если нужно обновить весь столбец в таблице, тогда так:
UPDATE tbl SET field = false

или так (если обратить внимание на сообщение Foenix),
UPDATE tbl SET field = 0 // это false
UPDATE tbl SET field = 1 // это true
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

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

Re: update одного поля

Сообщение walle » 15 ноя 2013, 13:59

trew писал(а): или так (если обратить внимание на сообщение Foenix),
UPDATE tbl SET field = 0 // это false
UPDATE tbl SET field = 1 // это true
обновился весь столбец.
[syntax=sql]
UPDATE tbl SET field = 0[/syntax]

но в true не обновляется почему? :?
[syntax=sql]
UPDATE tbl SET field = 1[/syntax]

вообще странно что sqlite true и false не поддерживает..

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

Re: update одного поля

Сообщение trew » 15 ноя 2013, 14:04

walle
SQLite
Не поддерживается тип boolean. Используйте числа 0 для false и 1 для true.
help
SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored as integers 0 (false) and 1 (true).
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

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

Re: update одного поля

Сообщение walle » 15 ноя 2013, 16:26

trew писал(а):WHERE _id = 1
означает что нужно обновить поле, у которого _id = 1 (где _id - это имя столбца, а 1 - это его значение)

Если нужно обновить весь столбец в таблице, тогда так:
UPDATE tbl SET field = false

или так (если обратить внимание на сообщение Foenix),
UPDATE tbl SET field = 0 // это false
UPDATE tbl SET field = 1 // это true
у меня только так заработало....
[syntax=java5]
if(chkFavorite.isChecked())
strUPDATE = "UPDATE tblStation SET favorite='true' WHERE title='" + stationValues[position] + "'";
else
strUPDATE = "UPDATE tblStation SET favorite='false' WHERE title='" + stationValues[position] + "'";
[/syntax]

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

Re: update одного поля

Сообщение trew » 15 ноя 2013, 16:34

favorite='false'
Значит поле у вас текстовое, а не число.

Такие поля обычно делают числовыми, чтобы компьютер быстрее работал, когда база большая.
Числа компьютер сравнивает быстрее, чем текст.
Программист запоминает для себя, что ноль - это будет false, а единица - true.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

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

Re: update одного поля

Сообщение walle » 15 ноя 2013, 16:40

trew писал(а):favorite='false'
Значит поле у вас текстовое, а не число.
[syntax=java5]
db.execSQL("CREATE TABLE 'tblStation' ('_id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
"'id_country' INTEGER NOT NULL ," +
"'id_genre' INTEGER NOT NULL ," +
"'id_language' INTEGER NOT NULL ," +
"'title' NVARCHAR NOT NULL," +
"'description' NVARCHAR NOT NULL," +
"'sourceURL' NVARCHAR NOT NULL , " +
"'favorite' BOOL NOT NULL);"); // DEFAULT 'true'
[/syntax]

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

Re: update одного поля

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

walle, запомни такую штуку.. в sqlite, даже если ты объявляешь поле как string или integer, то все равно можешь туда записать все что угодно. Вот такая вот интересная особенность. Это раз.

А два то, что нельзя вписать в поле значение "SET favorite=true", потому что true для sqlite это не служебное слово. Таким образом чтоб оно его воспринимало как текст - нужно заключить это слово в кавычки"SET favorite='true'", если как число - то писать число "SET favorite=1"

И три. "NVARCHAR" - писать там совершенно бесполезно. В sqlite воспример любой "unusual" тип данных

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

CREATE TABLE ex2(
  a VARCHAR(10),
  b NVARCHAR(15),
  c TEXT,
  d INTEGER,
  e FLOAT,
  f BOOLEAN,
  g CLOB,
  h BLOB,
  i TIMESTAMP,
  j NUMERIC(10,5)
  k VARYING CHARACTER (24),
  l NATIONAL VARYING CHARACTER(16)
);
Но все они будут приведены только к таким

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

TEXT
NUMERIC
INTEGER
REAL
NONE
http://www.sqlite.org/datatype3.html
по ссылке есть табличка, куда и как преобразовываются все любые типы к этим четырем.
Я не про то, что писать NVARCHAR не нужно.. нужно просто понимать - что разницы между
CHARACTER(20)
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB
нету совершенно никакой. Поэтому лучше при описании структуры таблицы использовать вышепреведенные типы
TEXT
NUMERIC
INTEGER
REAL
R.id.team

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

Ответить