Jevison7x:
私はこれらの2つのテーブルがありますinventory
し、product_categories
両方のテーブルと呼ばれる共通の列を持っていますbusinessId
。
今私は2つのデータベースを持って、1は、MySQL上でホストされ、両方のデータベースが同じテーブル構造を持つダービー上の他れます。
だから私は、両方のデータベースで次の問合せを実行してきました:
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」が見つかりません
何が間違ってここに起こっているしてください?
GMB:
結果セットの列は、別名テーブルが付いていません。
交換してください:
int businessId = rs.getInt("product_categories.businessId");
と:
int businessId = rs.getInt("businessId");
NB:使用するにはSELECT *
、通常、非常に良い習慣ではありません。明示的にあなたが返すようにクエリをしたいという列をリストすることをお勧めします。これは、明確に、クエリのインデントを行い、同じ列名がクエリで遊びに来て別のテーブルに存在するときに名前の競合を回避することができます。