为了账号安全,请及时绑定邮箱和手机立即绑定

德比 - java.sql.SQL异常:未找到列“table.column_name”

德比 - java.sql.SQL异常:未找到列“table.column_name”

哈士奇WWW 2022-09-14 10:24:33
我有这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 *


查看完整回答
反对 回复 2022-09-14
?
千巷猫影

TA贡献1829条经验 获得超7个赞

这可能是由于结果集中列的键名称不同。尝试在数据库中执行查询,然后从此处复制粘贴列名。

它可能应该是 或 。BUSINESSIDbusinessid

最好在联接具有相同列名的多个表时使用列名。alias


查看完整回答
反对 回复 2022-09-14
  • 2 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号