java - Derby - java.sql.SQLException:找不到列'table.column_name'
问题描述
我有这 2 个表:inventory
并且product_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
当我使用下面的 Java 代码执行上面的查询时,我在两个数据库中都获得了成功,但是当我尝试从表中获取列ResultSet
时 Derby 抛出异常businessId
product_categories
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:未找到列“product_categories.businessId”
请问这里出了什么问题?
解决方案
结果集中的列不以表别名为前缀。
代替:
int businessId = rs.getInt("product_categories.businessId");
和:
int businessId = rs.getInt("businessId");
注意:使用SELECT *
通常不是一个很好的做法;最好明确列出您希望查询返回的列。这使得查询的缩进更清晰,并且可以帮助避免在查询中发挥作用的不同表中存在相同列名时的名称冲突。
推荐阅读
- android - 视频流在本机反应中接收
- javascript - Sequelize 不能包含 count 属性
- python - 在 django 中使用 distinct 方法时如何使用过滤数据?
- sql - 带有条件的 Spark SQL 窗口函数范围边界
- r - 对日期列表进行排序并根据 R 中的此排序顺序对其他列表进行排序
- nativescript - Nativescript-vue 获取有焦点的TextField
- java - 方法意外返回 null
- c# - 如何检查 BsonDocument 中是否存在密钥或不使用 Mongodb C# 驱动程序?
- r - 如何创建一个循环来合并多个数据集以评估所有可能的组合(二类、三类、多类)
- java - 如何在日历 selenium java 上存在 2 个日期时选择可点击日期?