tag style etiqueta atributos java sql jdbc h2

java - style - H2: ¿cómo saber si la tabla existe?



h4 style (4)

Intento escribir código Java que verifique si existe una tabla H2: si no existe, primero ejecuta una consulta CREATE TABLE que crea la tabla antes de continuar.

Seguí el consejo en esta pregunta de Grupos de Google, pero simplemente no funciona.

Si ejecuto la siguiente consulta:

SELECT COUNT(*) AS count FROM information_schema.tables WHERE table_name = ''word_types''

Obtengo una sola fila con un campo COUNT que tiene un valor de 0; esto indica que las tablas word_types no existen. Pero cuando corro:

SELECT * FROM word_types

Obtengo 0 conjuntos de resultados, pero el frontend / GUI de SQL que estoy usando me muestra todos los campos / columnas que existen en la tabla word_types . Además, cuando profundizo en la lista de tablas disponibles de mi base de datos (usando la misma GUI), veo que word_types existe.

Entonces, ¿cuál es la consulta correcta para tratar de determinar si existe una tabla H2 o no? Usando v1.3.173 . ¡Gracias por adelantado!


Si la segunda consulta no arroja una excepción ni devuelve ninguna fila, solo significa que la tabla existe, pero está vacía.


Su consulta anterior devolverá el recuento de registros no existencia de su tabla, para eso tiene que iniciar la siguiente consulta. Esta consulta le devolverá toda la tabla de su Base de datos y desde allí puede verificar si su "word_types" existe o no.

USE YOURDBNAME GO SELECT * FROM sys.Tables GO

respóndeme si funciona o no funciona también


También hay una API JDBC que puede usar para consultar la existencia de una o más tablas. Esto es (en teoría) más portátil que una consulta directa que utiliza information_schema .

(En la práctica, la portabilidad todavía está algo limitada por el hecho de que diferentes DBMS definen y usan el esquema de conceptos y el catálogo de forma ligeramente diferente).

Así es como funciona:

boolean tableExists = false; Connection conn = getConnection(); // get a DB connection from somewhere ResultSet rset = conn.getMetaData().getTables(null, null, "WORD_TYPES", null); if (rset.next()) { tableExists = true; }

En lugar de "WORD_TYPES" , también puede usar comodines de estilo SQL, por ejemplo, "WORD_%" .

Tenga en cuenta que H2 tiene una configuración de configuración DATABASE_TO_UPPER que se establece en true predeterminada. Por lo tanto, cualquier nombre de tabla se convierte en mayúscula, por lo que debe consultar la tabla en mayúsculas (o establecer DATABASE_TO_UPPER en false ).

Además, usando los otros parámetros (que he establecido como null aquí), puede restringir aún más el ámbito de búsqueda a un tipo de tabla o scema específico.

El conjunto de resultados también contiene metainformación sobre la tabla, si la necesita, por ejemplo, el comentario de esquema o tabla.

Consulte JavaDoc para obtener una lista completa de opciones y metadatos disponibles.


Primero: verifique el caso en el que escribe los nombres de las tablas. Es muy importante. word_types y WORD_TYPES son dos tablas diferentes.
Segundo: si desea verificar si existe una tabla y si no la tiene, cree una, le recomiendo usar el siguiente ejemplo:

CREATE TABLE IF NOT EXISTS TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));