如何检查数据库中是否存在表或列?
我正在尝试制作简单的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 =