Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Гаджи
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
#1

Запрос к БД возвращает некорректный результат - Программирование Android

09.12.2016, 08:56. Просмотров 193. Ответов 7
Метки нет (Все метки)

В готовую БД пытаюсь вставлять записи из файла, который лежит в res/raw. Вот мой код

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
private void updateRusLakTable(InputStream in) throws IOException {
    BufferedReader buf = new BufferedReader(new InputStreamReader(in));
    String strFromFile;
    while ((strFromFile = buf.readLine()) != null) {
        int indexSymbol = strFromFile.indexOf("#");
        String word = strFromFile.substring(0, indexSymbol).trim();
        String translation = strFromFile.substring(indexSymbol + 1, strFromFile.length());
        String query = "SELECT " + DictionaryEntry.COLUMN_WORD + " FROM " + DictionaryEntry.TABLE_NAME + " WHERE " + DictionaryEntry.COLUMN_WORD + " = " + """ + word.trim() + """;
        Cursor c = db.database.rawQuery(query, null);
        try {
            if (c.getCount() == 0) {
                ContentValues cv = new ContentValues();
                cv.put(DictionaryEntry.COLUMN_WORD, word);
                cv.put(DictionaryEntry.COLUMN_TRANSLATION, translation);
 
                long newRowId = db.database.insert(DictionaryEntry.TABLE_NAME, null, cv);
            }
        } finally {
            c.close();
        }
    }
    buf.close();
    buf = null;
}
Первый раз когда выполняется метод все корректно добавляется. НО при каждом следующем запуске метода первая строка из файла, который лежит в res/raw опять добавляется в БД. Подскажите почему так происходит? Я не могу понять в чем причина
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2016, 08:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Запрос к БД возвращает некорректный результат (Программирование Android):

RX и Retrofit запрос, который ничего не возвращает
Делаю запросы так: subscription = getApi().getData(token) ...

Отправить post запрос с параметрами на сайт и получить результат
Всем привет! Делаю проект для сайта школы. Нужно отправить post запрос с...

bc возвращает некорректный результат
Пишу: bc -l <<< 0.11+0.00+0.00+0.00 Возвращает результат .11 Как...

Запрос выводит некорректный результат
Есть запрос "ВЫБРАТЬ |" + ?(неСворачиватьПоСериям,...

Запрос не возвращает результат
Здравствуйте. имеется такой запрос SELECT `id`, `last_name`, `first_name`,...

Запрос всегда возвращает результат
Доброго времени суток Есть код: <?php error_reporting(E_ALL); if...

7
vxg
Модератор
3229 / 2032 / 319
Регистрация: 13.01.2012
Сообщений: 7,884
09.12.2016, 10:10 #2
Гаджи, может в запросе надо использовать одинарные кавычки для обрамления строки и на самом деле он не успешный - поэтому количество элементов в выборке равно нулю?
0
Гаджи
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
09.12.2016, 10:29  [ТС] #3
В других местах похожие запросы. Но почему-то в этом методе для первой строки когда выборка в курсор происходит каждый раз возвращает количество записей 0, хотя в БД уже есть запись

Добавлено через 10 минут
Или может есть способ получше записывать данные в БД?

Добавлено через 10 секунд
Из файла
0
vxg
Модератор
3229 / 2032 / 319
Регистрация: 13.01.2012
Сообщений: 7,884
09.12.2016, 10:54 #4
Гаджи, вы пробовали так
+ " = " + "'" + word.trim() + "'"
?

Добавлено через 52 секунды
...кстати, вы записываете в базу слово без trim, а выборка идет с trim

Добавлено через 52 секунды
...правда оно с самого начала trim - второй вызов по идее не влияет...
0
Гаджи
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
09.12.2016, 10:56  [ТС] #5
вы пробовали так
+ " = " + "'" + word.trim() + "'"
?

пробовал так. То же самое
0
vxg
Модератор
3229 / 2032 / 319
Регистрация: 13.01.2012
Сообщений: 7,884
09.12.2016, 11:12 #6
Цитата Сообщение от Гаджи Посмотреть сообщение
пробовал так. То же самое
очень странно ибо эта строка не спроста подсвечивается именно как строка - то есть там не результат вызова word.trim(), а реально тупо текст значение которого word.trim()

Добавлено через 47 секунд
...экранировать двойные кавычки пробовали?
0
Гаджи
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
09.12.2016, 11:17  [ТС] #7
Да, в коде они экранированы. Тут когда вставлял код \ не отобразилась почему-то. Вторую и последующие строки ищет нормально и правильно выводит количество записей в курсоре. А вот с первой строкой не пойму почему так.

Добавлено через 2 минуты
Вот код еще раз выложу. Выводу специально сделал чтобы количество записей в курсоре видеть

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
28
29
30
31
private void updateRusLakTable(InputStream in) throws IOException {
        BufferedReader buf = new BufferedReader(new InputStreamReader(in));
        updateArrayList.clear(); //Коллекция хранит строки из файла, где хранятся слова, добавляемые в БД
        String strFromFile; //Отдельная строка из файла
        while ((strFromFile = buf.readLine()) != null) {
            int indexSymbol = strFromFile.indexOf("#");
            String word = strFromFile.substring(0, indexSymbol).trim();
            String translation = strFromFile.substring(indexSymbol + 1, strFromFile.length()).trim();
            String query = "SELECT " + DictionaryEntry.COLUMN_WORD + " FROM " + DictionaryEntry.TABLE_NAME + " WHERE " + DictionaryEntry.COLUMN_WORD + " = " + """ + word.trim() + """;
            Cursor c = db.database.rawQuery(query, null);
            System.out.println("word = " + word);
            System.out.println("query = " + query);
            System.out.println("count = " + c.getCount());
            System.out.println("****");
            try {
                if (c.getCount() == 0) {
                    ContentValues cv = new ContentValues();
                    cv.put(DictionaryEntry.COLUMN_WORD, word);
                    cv.put(DictionaryEntry.COLUMN_TRANSLATION, translation);
                    cv.put(DictionaryEntry.COLUMN_FAVORITES, "0");
                    cv.put(DictionaryEntry.COLUMN_TYPE, "1");
 
                    long newRowId = db.database.insert(DictionaryEntry.TABLE_NAME, null, cv);
                }
            } finally {
                c.close();
            }
        }
        buf.close();
        buf = null;
    }
0
Bend3r
149 / 136 / 35
Регистрация: 29.07.2012
Сообщений: 709
09.12.2016, 18:38 #8
После строки
Java
1
Cursor c = db.database.rawQuery(query, null);
Вызовите
Java
1
с.moveToFirst();
Добавлено через 15 секунд
https://developer.android.com/refere...l#moveToFirst()
0
09.12.2016, 18:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2016, 18:38
Привет! Вот еще темы с решениями:

Mysql запрос не возвращает ожидаемый результат
Всем привет. Возникла не большая проблема з запросом и отображениям данных. ...

Запрос из PHP к БД MySQL возвращает результат в неправильной кодировке
запрос из пхп : <?php $query = "select * from `news database` order by...

функция mysql_query возвращает один и тот же результат (false) и тогда, когда запрос на удаление выполняется и
Подскажите,пожалуйста,почему функция mysql_query возвращает один и тот же...

Некорректный результат вычислений
var i,n,suma:integer; begin suma:=0; writeln('Введіть N'); ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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