ダービー - ます。java.sql.SQLException:列「table.column_name」が見つかりません

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 *、通常、非常に良い習慣ではありません。明示的にあなたが返すようにクエリをしたいという列をリストすることをお勧めします。これは、明確に、クエリのインデントを行い、同じ列名がクエリで遊びに来て別のテーブルに存在するときに名前の競合を回避することができます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=186326&siteId=1