如何检查数据库中是否存在表或列?

我正在尝试制作简单的java代码,以检查MySQL DB中是否存在表和/或列。 我应该使用Java代码进行检查还是创建一个SQL查询字符串并执行它来进行检查?

编辑-

@ aleroot –

我尝试使用您的代码,如下所示。 当我运行下面的代码时,我看不到任何表或列。 我只看到这个 –

Driver Loaded. Got Connection. 

我的DB有很多DB,表和列。 我不知道为什么这个程序正常工作。

 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 !"); } } } 

要检查表是否存在,可以使用以下方式使用DatabaseMetaData :

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

要检查列是否存在,您可以以类似的方式使用它:

 DatabaseMetaData md = connection.getMetaData(); ResultSet rs = md.getColumns(null, null, "table_name", "column_name"); if (rs.next()) { //Column in table exist } 
 SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='table_schema' AND TABLE_NAME='table_name' AND COLUMN_NAME='column_name' 

如果这个sql什么都不返回 – 列不存在。 您可以在java端执行此查询,但这取决于您使用的内容(JPA,JDBC,JDBCTemplate)。

知道您几乎可以使用以下SQL语句从表中选择一列(在MySQL中):

 show columns from TABLE_NAME where field = 'FIELD_NAME'; 

你可以这样做:

 ... 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!"); } ... 

在Apache Derby(SQL)中

例如检查列是否存在:

 SELECT ss.SCHEMANAME, st.TABLENAME, sc.COLUMNNAME FROM SYS.SYSSCHEMAS ss INNER JOIN SYS.SYSTABLES st ON st.SCHEMAID = ss.SCHEMAID AND st.TABLENAME =  INNER JOIN SYS.SYSCOLUMNS sc ON sc.REFERENCEID = st.TABLEID AND sc.COLUMNNAME =  WHERE ss.SCHEMANAME =