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));