簡體   English   中英

JDBC / Java - 如何檢查數據庫中是否存在表和列?

[英]JDBC/Java - How to check if a table and also a column exist in a database?

我正在使用MySql,jdbc和java代碼。 我希望代碼檢查是否:

1-表存在於特定數據庫中。 2-列存在於特定數據庫的特定表中。

你能告訴我怎么做嗎?

正確的方法是使用JDBC MetaData

Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
DatabaseMetaData metadata = connection.getMetaData();
ResultSet resultSet;
resultSet = metadata.getTables(null, null, "tablename", null);
if(resultSet.next())
    // Table exists

resultSet = metadata.getColumns(null, null, "tablename", "columnName");
if(resultSet.next())
    // Column exists

要調試代碼,最好先嘗試獲取所有表名,然后將其打印出來,如下所示:

resultSet = metadata.getTables(null, null, "%", null);
while(resultSet.next())
    System.out.println(resultSet.getString("TABLE_NAME"));

NB! 如果未列出任何表,則使用舊版本的MySQL JDBC驅動程序,並出現以下錯誤http://bugs.mysql.com/bug.php?id=20913您應該升級或使用數據庫名稱作為第一個參數的getTables

尋找表格:

SELECT COUNT(*)
FROM information_schema.tables 
WHERE table_schema = 'db_name' 
AND table_name = 'table_name';

如果它存在,那么查找列:

SELECT * 
FROM information_schema.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'db_name' 
AND TABLE_NAME = 'table_name' 
AND COLUMN_NAME = 'column_name'

使用Connection.getMetaData() ,並使用返回的對象來獲取目錄,模式,表和列。

 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 DatabaseMetaData metadata = connection.getMetaData();
 ResultSet resultSet;
 resultSet = metadata.getTables(null, null, "tablename", null);
 if(resultSet!=null){
   // next() checks if the next table exists ...
      System.out.println("Table exists");
 }

暫無
暫無

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

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