Tengo estas 2 tablas: inventory
y product_categories
ambas tablas tienen una columna común llama businessId
.
Ahora tengo 2 bases de datos, uno se encuentra alojado en MySQL y el otro en Derby ambas bases de datos tienen las mismas estructuras de la tabla.
Así que he estado ejecutando la siguiente consulta en ambas bases de datos:
SELECT *
FROM INVENTORY
INNER JOIN PRODUCT_CATEGORIES
ON INVENTORY.BUSINESSID = PRODUCT_CATEGORIES.BUSINESSID
AND INVENTORY.CATEGORY = PRODUCT_CATEGORIES.CATEGORYNAME
WHERE INVENTORY.BUSINESSID = 1
Cuando ejecuto la consulta anterior utilizando el código Java a continuación, aparece un éxito ResultSet
tanto en las bases de datos, sin embargo Derby lanza una excepción cuando intento para obtener la businessId
columna de la product_categories
tabla
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
...
}
}
Estoy recibiendo este mensaje de error:
java.sql.SQLException: Columna 'product_categories.businessId' no encontrado
Por favor, lo que está mal aquí?
Las columnas en el conjunto de resultados no tienen el prefijo tabla de alias.
Reemplazar:
int businessId = rs.getInt("product_categories.businessId");
Con:
int businessId = rs.getInt("businessId");
NB: usando SELECT *
por lo general no es una muy buena práctica; es mejor hacer una lista explicitamente las columnas que desea que devuelva la consulta. Esto hace que el guión de la consulta más clara, y puede ayudar a evitar conflictos de nombres cuando existe el mismo nombre de la columna en tablas diferentes que entran en juego en la consulta.