cursor.getString() не работает должным образом (например, почтовый код = 01234, но вместо этого возвращает 1234)

Я работаю с Android - SQLite. У меня есть кодовый почтовый номер, хранящийся как CHAR[5] в SQLite db.

Cursor cursor = db.query( ... )
String code = cursor.getString(cursor.getColumnIndex("code"));
CREATE TABLE codepostal (
    code CHAR( 5 ) PRIMARY KEY NOT NULL UNIQUE,
    name VARCHAR( 70 ) NOT NULL
);
INSERT INTO [codepostal] ([code], [name]) VALUES (01001, 'My_city');

Однако он всегда возвращается с удалением начального символа «0» почтового кода? (например: почтовый индекс = "01234", но вместо этого вернуть "1234")

Может кто-нибудь объяснить?


person Anh-Tuan Mai    schedule 02.09.2015    source источник
comment
может быть, вы использовали putInt для ключа code в своем объекте ContentValues?   -  person Leo    schedule 02.09.2015
comment
Извините, я не понимаю вашего ответа. Можете ли вы объяснить это более точно?   -  person Anh-Tuan Mai    schedule 02.09.2015
comment
Я предполагал, что вы использовали этот метод developer. android.com/reference/android/database/sqlite/, java.lang.String, android.content.ContentValues), чтобы вставить 01234 в вашу базу данных, но, видимо, вы читаете из файла базы данных, не так ли? ? Если нет, покажите, как вы вставили 01234 в свою базу данных.   -  person Leo    schedule 02.09.2015
comment
Вы проверили, что вставка работает с начальным нулем?   -  person Rowland Shaw    schedule 02.09.2015
comment
Возможно, вы использовали тип данных INTEGER для почтового индекса вместо TEXT. Итак, когда вы сохраняете 01234, сохраняется INTEGER 1234 вместо TEXT "01234".   -  person Phantômaxx    schedule 02.09.2015
comment
Я создал свою базу данных с помощью SQLite Studio, затем экспортировал в файл sql, а затем выполнил файл sql в своем приложении для Android. Например: CREATE TABLE codepostal (код CHAR(5) PRIMARY KEY NOT NULL UNIQUE, имя VARCHAR(70) NOT NULL); ВСТАВЬТЕ В [codepostal] ([код], [имя]) ЗНАЧЕНИЯ (01001, 'Мой_город'); Так что даже с CHAR[5] мой запрос все равно вставляется как Int? Большое спасибо.   -  person Anh-Tuan Mai    schedule 02.09.2015
comment
@ Anh-TuanMai В вашем SQL вы должны иметь ... ЗНАЧЕНИЯ ('01001', ...) вместо ЗНАЧЕНИЙ (01001, ...). У вас отсутствуют кавычки, без них SQLite преобразует это значение в int (то есть без начального нуля), а затем сохраняет его как varchar.   -  person Pawel Urban    schedule 02.09.2015
comment
Вставьте значение в виде строковых литералов, добавив 'quote'.   -  person AC-OpenSource    schedule 02.09.2015
comment
Или вы можете использовать связанные параметры (эти забавные заполнители ?), передавая массив строк в качестве значений. Android добавит необходимые ' к строковым значениям.   -  person Phantômaxx    schedule 02.09.2015
comment
Так как я делаю свой файл sql с помощью студии sqlite. Я не могу добавить "цитата". Возможно, мне следует вставлять данные непосредственно из файлов csv вместо использования экспортированного в sqlite studio файла .sql.   -  person Anh-Tuan Mai    schedule 02.09.2015


Ответы (1)


Все ответы LeoLink, Frank N. Stein, Pawel Urban, AC-OpenSource были правильными. Большое спасибо, ребята.

Необходимо вставить значение в виде строковых литералов, добавив 'quote'

использовать

VALUES ('01001', 'My_city');

вместо

VALUES (01001, 'My_city');
person Anh-Tuan Mai    schedule 02.09.2015