簡體   English   中英

可以使用JDBC從數據庫中檢索一條記錄,但不能檢索另一條記錄

[英]Can retrieve one record from database but not another using JDBC

因此,對於一個學校項目,我正在構建一個不和諧的機器人。 我內置的功能之一是,他可以從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;
}

數據庫中的“類型”只是一個類別。 根據我所擁有的測試數據,這3種類型都不是,令人驚訝且孤獨。 只有no會返回gif。

刪除結束的ResultSet和Connection行:

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

您已經在使用try-with-resources關閉它

問題最終是MySql沒有將記錄提交到數據庫。 刷新工作台后,添加的記錄消失。 奇怪的是,即使記錄不在數據庫中,也可以對其進行檢索。

您的msg很可能與數據庫“ Type列的任何值都不完全匹配。

通過運行進行測試

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

直接在數據庫上手動執行此操作。

您也可以嘗試將以下代碼放在最后:

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

如果這些結果之一為零,則表示msgType並不完全匹配。 也許是大寫/小寫的問題?

另外,為避免SQL注入和其他問題,請強烈考慮使用PreparedStatement使用綁定變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM