Android-приложение правильно читает строковые столбцы, но не третий INTEGER (sqlite) - PullRequest
0 голосов
/ 02 мая 2019

У меня странная проблема, которую я не могу решить до конца жизни.

База данных sqlite проста.Две строки, каждая из которых является строкой, а другая - INTEGER.

enter image description here

Таблица содержит только одну запись в:

enter image description here

   public PubList readDatabase(String currentPostcode) {
        databaseReader dbReader;
        dbReader = new databaseReader(this);

        try {
            dbReader.updateDataBase();
        } catch (IOException mIOException) {
            throw new Error("Unable to update database");
        }

        try {
            pubDatabase = dbReader.getReadableDatabase();
        } catch (SQLException mSQLException) {
            throw new Error("SQLException");
        }


        String query = "SELECT Town,PostcodeArea,NumberOfPubs FROM PubLists WHERE PostcodeArea = '" + currentPostcode.substring(0, 4) + "'";
        final Cursor cursor = pubDatabase.rawQuery(query, null);
        if (cursor.moveToNext()) {
            currentTown.setListName(cursor.getString(cursor.getColumnIndex("Town")));
            currentTown.setPostcode(cursor.getString(cursor.getColumnIndex("PostcodeArea")));
            currentTown.setNumberOfPubs(cursor.getInt(cursor.getColumnIndex("NumberOfPubs")));
        }
        cursor.close();
        return currentTown;
    }

С некоторой отладкой я могу подтвердить, что оба столбца String вытягиваются правильно, но столбец int, который должен быть 23, ВСЕГДА возвращает 3, о которых я понятия не имеюоткуда 3.

Хотелось бы получить несколько указателей.

Редактировать: Как и просили, вот код для загрузки списка публикаций в базу данных.Этот код запускается из приложения javaFX на рабочем столе.

public void uploadPubList(PubList pubList){
        String sql = "INSERT OR REPLACE INTO main.PubLists(Town,PostCodeArea,NumberOfPubs) VALUES(?,?,?)";
        try {
            Connection conn = this.connect();
            for (Pub pub : pubList.getPubs()) {
                PreparedStatement pstmt = conn.prepareStatement(sql);
                pstmt.setString(1, pubList.getName());
                pstmt.setString(2, pubList.getPostCodeArea());
                pstmt.setInt(3, pubList.getPubs().size());
                pstmt.executeUpdate();
                insertPub(pubList, pub);
            }

        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    }

1 Ответ

1 голос
/ 02 мая 2019

В uploadPubList() почему вы перебираете pubList.getPubs()?Вы хотите вставить только 1 строку: название города, почтовый индекс и количество пабов, верно?Кроме того, эта строка:

insertPub(pubList, pub);

что это делает?Удалите цикл for и сохраните их:

public void uploadPubList(PubList pubList){
    String sql = "INSERT OR REPLACE INTO main.PubLists(Town,PostCodeArea,NumberOfPubs) VALUES(?,?,?)";
    try {
        Connection conn = this.connect();
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, pubList.getName());
        pstmt.setString(2, pubList.getPostCodeArea());
        pstmt.setInt(3, pubList.getPubs().size());
        pstmt.executeUpdate();
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
}

Удалите приложение с устройства, чтобы удалить и запустить базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...