No encuentro ninguna de las soluciones presentadas aquí para que esté completamente completa, así que agregaré la mía. Nada nuevo aquí. Puede unir esto de las otras soluciones presentadas más varios comentarios.
Hay por lo menos dos cosas que tendrá que asegurarse de que:
asegurarse de que pase el nombre de la tabla a la getTables()
method, en lugar de pasar un valor nulo. En el primer caso, permite que el servidor de base de datos filtre el resultado, en el segundo solicita una lista de todas las tablas del servidor y luego filtra la lista localmente. El primero es mucho más rápido si solo está buscando una sola tabla .
Asegúrese de comprobar el nombre de la tabla del conjunto de resultados con una coincidencia igual a . El motivo es que el getTables()
coincide con el patrón en la consulta de la tabla y el carácter _
es un comodín en SQL. Supongamos que está comprobando la existencia de una tabla llamada EMPLOYEE_SALARY
. A continuación, obtendrá una coincidencia en EMPLOYEESSALARY
también que no es lo que desea.
Ohh, y recuerde cerrar esos resultados. Desde Java 7, querrá usar un try-with-resources statement para eso.
Aquí es una solución completa:
public static boolean tableExist(Connection conn, String tableName) throws SQLException {
boolean tExists = false;
try (ResultSet rs = conn.getMetaData().getTables(null, null, tableName, null)) {
while (rs.next()) {
String tName = rs.getString("TABLE_NAME");
if (tName != null && tName.equals(tableName)) {
tExists = true;
break;
}
}
}
return tExists;
}
Es posible que desee considerar lo que se pasa como parámetro types
(cuarto parámetro) en su llamada getTables()
. Normalmente me iría al null
porque no desea restringirse. UNA VISTA es tan buena como una MESA, ¿verdad?En estos días, muchas bases de datos le permiten actualizar a través de una VISTA, por lo que restringirse a solo el tipo de TABLA no es, en la mayoría de los casos, el camino a seguir. YMMV.
posible duplicado de [¿Cómo puedo detectar la existencia de una tabla de SQL en Java?] (Http://stackoverflow.com/questions/927807/how-can-i-detect-a-sql-tables-existence -in-java) – finnw
Sea más específico en su pregunta. –