簡體   English   中英

如何檢查數據庫中是否存在表或列?

[英]How to check if a table or a column exists in a database?

我正在嘗試制作簡單的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 = <YOUR TABLE NAME>
INNER JOIN SYS.SYSCOLUMNS sc ON sc.REFERENCEID = st.TABLEID AND sc.COLUMNNAME = <YOUR COLUMN NAME>
WHERE ss.SCHEMANAME = <YOUR SCHEMA>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM