![](/img/trans.png)
[英]How can I use JDBC to copy schema from one database to another without using Apache DDLUtils?
[英]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());
如果這些結果之一為零,則表示msg
與Type
並不完全匹配。 也許是大寫/小寫的問題?
另外,為避免SQL注入和其他問題,請強烈考慮使用PreparedStatement
使用綁定變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.