Может извлечь одну запись из базы данных, но не другую, используя JDBC - PullRequest
0 голосов
/ 03 декабря 2018

Итак, для школьного проекта я создаю бот-диск.Одна из функций, которые я встроил, заключается в том, что он может извлекать GIF-ссылки из базы данных MySQL и отправлять их в сообщении.Теперь моя проблема заключается в том, что я могу получить только одну запись из своей базы данных, но никаких других записей.Если я помещу запрос, который я использую, в рабочую среду MySQL и запустю его, он получит эти записи.

Это метод для получения GIF-файлов

public static ArrayList<Gif> GetGifsFromDB(String msg){
    ArrayList<Gif> gifs = new ArrayList<>();

    try(Connection conn = (Connection)DriverManager.getConnection(url, userName, password)){
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Statement stmnt = conn.createStatement();
        String sql = "Select * from gif WHERE Type = '" + msg + "'";
        stmnt.execute(sql);

        try(ResultSet rs = stmnt.getResultSet()){
            while(rs.next()){
            Gif g = new Gif();
            g.setID(rs.getInt("GifID"));
            g.setURL(rs.getString("GifURL"));
                System.out.println(g.getID() + g.getURL());
            gifs.add(g);
        }
        rs.close();
        conn.close();
        }

    }
    catch(SQLException ex){
        System.err.println(ex.getMessage());
    }
    catch(Exception ex){
        System.err.println(ex.getMessage());
    }

    return gifs;
}

«Тип» вБаза данных это просто категория.С данными испытаний, которые у меня есть, 3 типа - нет, удивлены и одиноки.Только не возвращает гиф.

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

В результате проблема с MySql не фиксирует записи в базе данных.После обновления рабочей среды добавленные записи исчезли.Довольно странно, что хотя записей не было в базе данных, их можно было бы восстановить.

0 голосов
/ 03 декабря 2018

Скорее всего, ваш msg не совсем совпадает ни с одним из значений для столбца Type базы данных.

Проверьте, запустив

SELECT COUNT(*) FROM gif WHERE Type = '... put msg content here ...'

Сделайте это вручную прямо набаза данных.

Вы также можете попробовать поставить следующую строку кода в конце:

System.out.println("Number of Selected Gifs: "+gifs.size());

Если какой-либо из этих результатов равен нулю, то это означает, что msg не был точно сопоставлен сType.Может быть, проблема в верхнем / нижнем регистре?

Также, чтобы избежать SQL-инъекций и других проблем, настоятельно рекомендуем использовать переменные связывания, используя PreparedStatement.

0 голосов
/ 03 декабря 2018

Удалить закрывающие строки ResultSet и Connection:

 rs.close();
 conn.close();

Вы уже закрываете его с помощью try-with-resources

...