java—可以从数据库中检索一条记录,但不能使用jdbc检索另一条记录

wrrgggsh  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(306)

所以,对于一个学校项目,我正在构建一个discord机器人。我内置的一个特性是,他可以从mysql数据库中检索gif链接,并以消息的形式发送它们。现在,我的问题是我只能从数据库中检索一条记录,而不能检索其他记录。如果我将使用的查询放入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;
}

数据库中的“type”只是一个类别。有了我的测试数据,这三种类型是没有,惊讶和孤独。只有no返回gif。

fkvaft9z

fkvaft9z1#

问题是mysql没有将记录提交到数据库。一旦workbench被刷新,添加的记录就会消失。奇怪的是,即使这些记录不在数据库中,它们也可以被检索。

xtfmy6hx

xtfmy6hx2#

很可能是你的 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 .

wswtfjt7

wswtfjt73#

删除关闭结果集和连接行:

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

您已经在使用try with resources关闭它

相关问题