我有這2個表:兩個表都有一個名為 的公共列。inventoryproduct_categoriesbusinessId現在我有2個數據庫,一個托管在MySQL上,另一個托管在Derby上,兩個數據庫具有相同的表結構。因此,我一直在對這兩個數據庫執行以下查詢:SELECT * FROM INVENTORYINNER JOIN PRODUCT_CATEGORIES ON INVENTORY.BUSINESSID = PRODUCT_CATEGORIES.BUSINESSID AND INVENTORY.CATEGORY = PRODUCT_CATEGORIES.CATEGORYNAMEWHERE INVENTORY.BUSINESSID = 1當我使用下面的Java代碼執行上面的查詢時,我在兩個數據庫中都取得了成功,但是當我嘗試從表中獲取列時,Derby會引發異常ResultSetbusinessIdproduct_categoriestry(Connection conn = dbConfig.getDatabaseConnection()){ PreparedStatement pst = conn.prepareStatement(sql); pst.setInt(1, businessId); List<Product> products = new ArrayList<>(); ResultSet rs = pst.executeQuery(); while(rs.next()) { ... int businessId = rs.getInt("product_categories.businessId"); //<-- This lines throws an exception ... }}我收到此錯誤消息:java.sql.SQL 異常:未找到“product_categories.業務 Id”列請問這里出了什么問題?
2 回答

慕村9548890
TA貢獻1884條經驗 獲得超4個贊
結果集中的列不以表別名為前綴。
取代:
int businessId = rs.getInt("product_categories.businessId");
跟:
int businessId = rs.getInt("businessId");
注意:使用通常不是很好的做法;最好明確列出您希望查詢返回的列。這使得查詢的縮進更清晰,并且有助于避免在查詢中起作用的不同表中存在相同的列名時發生名稱沖突。SELECT *

千巷貓影
TA貢獻1829條經驗 獲得超7個贊
這可能是由于結果集中列的鍵名稱不同。嘗試在數據庫中執行查詢,然后從此處復制粘貼列名。
它可能應該是 或 。BUSINESSID
businessid
最好在聯接具有相同列名的多個表時使用列名。alias
添加回答
舉報
0/150
提交
取消