我正在嘗試我的一個非常簡單的 web 應用程式,webshop,用于紙杯蛋糕。
從 webApp 中,您可以從具有三個屬性(頂部、底部、數量)的下拉串列中選擇一個紙杯蛋糕。這些存盤在我的 sessionScope 上的 ArrayList 中,但都是數字,例如 Chokolate 為 1,Vanilla 為 2。我想使用這些 topId 數字向我的資料庫(MySQL)詢問 1 中的內容,然后讓它回傳 Chokolate。
我想我的代碼幾乎就在那里,但無法讓它回傳我的字串,因為我的 topId 是一個 Int。
public static Top getTopById(int topId) {
readFromArrayPutInSQL();
String sql = "INSERT INTO cupcaketopping (toppingType, toppingPrice) VALUES (?, ?)";
try {
ConnectionPool connectionPool = new ConnectionPool();
String query = "SELECT toppingType FROM cupcaketopping";
Statement statement = connectionPool.getConnection().createStatement();
ResultSet rs = statement.executeQuery(query);
rs.getString(topId);
} catch (SQLException e) {
throw new RuntimeException(e);
}
return topId; //Here is the problem - I GUESS?
}
由于在評論中輸入而更改后的代碼似乎可以正常作業!
public static Top getTopById(int topId) {
readFromArrayPutInSQL();
String query = "SELECT toppingType FROM cupcaketopping WHERE toppingID = " topId "";
try {
ConnectionPool connectionPool = new ConnectionPool();
PreparedStatement preparedStatement = connectionPool.getConnection().prepareStatement(query);
ResultSet rs = preparedStatement.executeQuery(query);
rs.next();
return new Top(rs.getString(1));
//connectionPool.close(); //NOTE! Won't run, IntelliJ is asking me to delete!
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
uj5u.com熱心網友回復:
有幾個問題:
您正在從
cupcaketopping表中選擇所有行,而不管topId. 您可能應該使用PreparedStatement, 然后將topId其用作查詢的一部分。你從不打電話
ResultSet#next()。結果集總是在第一行“之前”開始。您必須為next()結果集中的每一行呼叫(true如果有一行要讀取,則回傳)。該
ResultSet#getString(int)方法在String結果的給定索引處獲取列的值。您只選擇一列,因此引數可能應該是1(nottopId)。完成后,您永遠不會關閉
Statement它。- 根據您的連接池類的作業方式,您實際上可能需要關閉它
Connection。
- 根據您的連接池類的作業方式,您實際上可能需要關閉它
您永遠不會嘗試使用
String回傳的rs.getString(topId).您永遠不會嘗試將查詢結果轉換為
Top實體。鑒于查詢可能不回傳任何結果,您可能需要考慮設定回傳型別
Optional<Top>。該
sql字串似乎沒有任何目的。
您的代碼應該看起來更像這樣:
public Optional<Top> getTopById(int topId) {
Connection conn = ...;
String query = "SELECT toppingType FROM cupcaketopping WHERE id = ?";
// closes the statement via try-with-resources
try (PreparedStatement stat = conn.prepareStatement(query)) {
stat.setInt(1, topId);
ResultSet rs = stat.executeQuery();
// assume unique result (as it's assumed the ID is the primary key)
if (rs.next()) {
// assumes 'Top' has a constructor that takes a 'String'
return Optional.of(new Top(rs.getString(1)));
} else {
return Optional.empty();
}
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
}
您的實際實作可能會有所不同,具體取決于其余代碼的設計方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/533155.html
標籤:爪哇mysql
下一篇:Mysql選擇SUM(不同)
