2012-07-30 29 views
4

我使用MySql,jdbc和java代碼。我希望代碼檢查是否:JDBC/Java - 如何檢查數據庫中是否存在表和列?

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

你能告訴我如何做到這一點?

+0

http://stackoverflow.com/questions/5679259/how-to-get-list-of-databases-schema-names-of-mysql-using-java-jdbc – 2012-07-30 21:26:03

回答

11

正確的方法是使用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")); 

注意!如果沒有表列出,你正在使用MySQL JDBC驅動程序有以下錯誤的是舊版本http://bugs.mysql.com/bug.php?id=20913你應該升級或使用數據庫名稱作爲第一個參數的getTables

+0

不適用於我。我沒有輸出。 – 2012-07-30 21:56:37

+0

然後你使用錯誤的名字。只需打印出你從resultSet得到的所有內容。更新示例以顯示如何。 – anttix 2012-07-30 22:00:57

+1

答案的調試部分不起作用。它需要更正。將要搜索表的數據庫的名稱作爲第一個參數。即,resultSet = metadata.getTables(TheDataBaseNameGoesHere,null,「%」,null); – 2012-07-30 22:25:29

1

查找表:

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' 
0
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"); 
} 
相關問題