德比 - java.sql.SQLException:找不到列 'table.column_name'
Derby - java.sql.SQLException: Column 'table.column_name' not found
我有这 2 个 table:inventory
和 product_categories
两个 table 都有一个名为 businessId
.
的公共列
现在我有 2 个数据库,一个托管在 MySQL 上,另一个托管在 Derby 上,两个数据库具有相同的 table 结构。
所以我一直在两个数据库上执行以下查询:
SELECT *
FROM INVENTORY
INNER JOIN PRODUCT_CATEGORIES
ON INVENTORY.BUSINESSID = PRODUCT_CATEGORIES.BUSINESSID
AND INVENTORY.CATEGORY = PRODUCT_CATEGORIES.CATEGORYNAME
WHERE INVENTORY.BUSINESSID = 1
当我使用下面的 Java 代码执行上面的查询时,我在两个数据库中都获得了成功的 ResultSet
,但是当我尝试获取 businessId
时 Derby 抛出异常来自 product_categories
table
的列
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
...
}
}
我收到此错误消息:
java.sql.SQLException: Column 'product_categories.businessId' not found
请问这里出了什么问题?
结果集中的列没有前缀 table 别名。
替换:
int businessId = rs.getInt("product_categories.businessId");
与:
int businessId = rs.getInt("businessId");
注意:使用 SELECT *
通常不是一个很好的做法;最好明确列出您希望查询到的列 return。这使得查询的缩进更清晰,并且可以帮助避免在查询中出现的不同 table 中存在相同列名时的名称冲突。
这可能是由于结果集中列的键名不同所致。尝试在您的数据库中执行查询,然后从那里复制粘贴列名。
应该是BUSINESSID
或者businessid
。
当您连接多个具有相同列名的表时,使用 alias
作为您的列名是个好主意。
我有这 2 个 table:inventory
和 product_categories
两个 table 都有一个名为 businessId
.
现在我有 2 个数据库,一个托管在 MySQL 上,另一个托管在 Derby 上,两个数据库具有相同的 table 结构。
所以我一直在两个数据库上执行以下查询:
SELECT *
FROM INVENTORY
INNER JOIN PRODUCT_CATEGORIES
ON INVENTORY.BUSINESSID = PRODUCT_CATEGORIES.BUSINESSID
AND INVENTORY.CATEGORY = PRODUCT_CATEGORIES.CATEGORYNAME
WHERE INVENTORY.BUSINESSID = 1
当我使用下面的 Java 代码执行上面的查询时,我在两个数据库中都获得了成功的 ResultSet
,但是当我尝试获取 businessId
时 Derby 抛出异常来自 product_categories
table
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
...
}
}
我收到此错误消息:
java.sql.SQLException: Column 'product_categories.businessId' not found
请问这里出了什么问题?
结果集中的列没有前缀 table 别名。
替换:
int businessId = rs.getInt("product_categories.businessId");
与:
int businessId = rs.getInt("businessId");
注意:使用 SELECT *
通常不是一个很好的做法;最好明确列出您希望查询到的列 return。这使得查询的缩进更清晰,并且可以帮助避免在查询中出现的不同 table 中存在相同列名时的名称冲突。
这可能是由于结果集中列的键名不同所致。尝试在您的数据库中执行查询,然后从那里复制粘贴列名。
应该是BUSINESSID
或者businessid
。
当您连接多个具有相同列名的表时,使用 alias
作为您的列名是个好主意。