2012-07-28 40 views
10

Estoy tratando de hacer código java simple que verificará si existe una tabla y/o una columna en una base de datos MySQL. ¿Debería usar código Java para hacer la comprobación o hacer una cadena de consulta SQL y ejecutar eso para hacer la comprobación?¿Cómo verificar si existe una tabla o una columna en una base de datos?

EDIT-

@ aleroot -

He intentado utilizar el código como se muestra a continuación. No veo ninguna tabla o columna cuando ejecuto el código a continuación. Solo veo esto:

Driver Loaded. 
Got Connection. 

Mi DB tiene una gran cantidad de bases de datos, tablas y columnas. No sé por qué este programa funciona correctamente.

import java.sql.Connection; 
import java.sql.DatabaseMetaData; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

    public class Tester { 
    static Connection conn; 
    static Statement st; 
    public static void main(String[] args) throws Exception { 
    try { 
    // Step 1: Load the JDBC driver. 
    System.out.println("Driver Loaded."); 
    // Step 2: Establish the connection to the database. 
    String url = "jdbc:mysql://localhost:3306/"; 

    conn = DriverManager.getConnection(url, "cowboy", "123456"); 
    System.out.println("Got Connection."); 

    st = conn.createStatement(); 
} catch (Exception e) { 
    System.err.println("Got an exception! "); 
    e.printStackTrace(); 
    System.exit(0); 
} 

DatabaseMetaData md2 = conn.getMetaData(); 
ResultSet rsTables = md2.getColumns(null, null, "customers", "name"); 
if (rsTables.next()) { 
     System.out.println("Exists !"); 
    } 
    } 

} 
+0

Realice una consulta y compruebe si se realiza correctamente. Si es así, sabes que existe tabla/columna. – ATaylor

+0

¿está usando JDBC? –

+0

@FranciscoSpaeth - sí, es jdbc –

Respuesta

26

Para comprobar si un cuadro ya existen, se puede utilizar DatabaseMetaData de esta manera:

DatabaseMetaData md = connection.getMetaData(); 
ResultSet rs = md.getTables(null, null, "table_name", null); 
if (rs.next()) { 
    //Table Exist 
} 

Y para comprobar si una columna de existir se puede utilizar de una manera similar:

DatabaseMetaData md = connection.getMetaData(); 
ResultSet rs = md.getColumns(null, null, "table_name", "column_name"); 
if (rs.next()) { 
     //Column in table exist 
    } 
+0

+1 para DatanaseMetaData –

+4

@aleroot - El código no funciona para mí :( –

+1

Si este código no funciona, intente usar mayúsculas (mayúsculas) para su table_name –

0

Sabiendo que prácticamente se puede seleccionar una columna de una tabla utilizando la siguiente instrucción SQL (MySQL):

show columns from TABLE_NAME where field = 'FIELD_NAME'; 

Se podría hacer algo como:

... 
PreparedStatement preparedStatement = 
    connection.prepareStatement(
    "show columns from [TABLE_NAME] where field = ?"); 
preparedStatement.setString(1, columName); 

ResultSet resultSet = preparedStatement.executeQuery(); 

if (resultSet.next()) { 
    System.out.println("column exists!"); 
} else { 
    System.out.println("column doesn't exists!"); 
} 
... 
+0

No funcionará en una base de datos que no admita el SHOW (como MSSQL) ... – aleroot

+0

@aleroot esto está claro, no me preocupé porque la pregunta era sobre MySQL base de datos;) pero aun así, gracias añadiré un comentario a mi respuesta –

+0

Sí, no me di cuenta la primera vez, agregué la etiqueta MySQL ahora. Gracias. – aleroot

1
SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA='table_schema' 
    AND TABLE_NAME='table_name' 
    AND COLUMN_NAME='column_name' 

Si este sql no devuelve nada, la columna no existe. Puede ejecutar esta consulta en java, pero esto depende de lo que use (JPA, JDBC, JDBCTemplate).

0

En Apache Derby (SQL)

Por ej. compruebe si existe una columna:

SELECT ss.SCHEMANAME, st.TABLENAME, sc.COLUMNNAME FROM SYS.SYSSCHEMAS ss 
INNER JOIN SYS.SYSTABLES st ON st.SCHEMAID = ss.SCHEMAID AND st.TABLENAME = <YOUR TABLE NAME> 
INNER JOIN SYS.SYSCOLUMNS sc ON sc.REFERENCEID = st.TABLEID AND sc.COLUMNNAME = <YOUR COLUMN NAME> 
WHERE ss.SCHEMANAME = <YOUR SCHEMA> 
Cuestiones relacionadas