Derby-java.sql.SQLException:找不到列“ table.column_name”

Jev*_*n7x 4 java mysql sql derby

我有这2个表:inventoryproduct_categories两个表有一个叫做公共列businessId

现在,我有2个数据库,一个数据库托管在MySQL上,另一个数据库托管在Derby上,两个数据库具有相同的表结构。

因此,我一直在两个数据库上执行以下查询:

SELECT * 
FROM INVENTORY
INNER JOIN PRODUCT_CATEGORIES
    ON INVENTORY.BUSINESSID = PRODUCT_CATEGORIES.BUSINESSID
    AND INVENTORY.CATEGORY = PRODUCT_CATEGORIES.CATEGORYNAME
WHERE INVENTORY.BUSINESSID = 1
Run Code Online (Sandbox Code Playgroud)

当我使用下面的Java代码执行上面的查询时,我ResultSet在两个数据库中都获得了成功,但是当我尝试businessIdproduct_categories表中获取列时,Derby引发了异常

try(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
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

java.sql.SQLException:找不到列“ product_categories.businessId”

请问这里出了什么问题?

GMB*_*GMB 5

结果集中的列不以表别名为前缀。

更换:

int businessId = rs.getInt("product_categories.businessId");
Run Code Online (Sandbox Code Playgroud)

带有:

int businessId = rs.getInt("businessId");
Run Code Online (Sandbox Code Playgroud)

注意:使用SELECT *通常不是很好的做法;最好明确列出要查询返回的列。这样可以使查询的缩进更加清晰,并且当在查询中要使用的不同表中存在相同的列名称时,可以帮助避免名称冲突。