我使用MySql,jdbc和java代碼。我希望代碼檢查是否:JDBC/Java - 如何檢查數據庫中是否存在表和列?
1-表格存在於特定數據庫中。 2-列存在於特定數據庫的特定表中。
你能告訴我如何做到這一點?
我使用MySql,jdbc和java代碼。我希望代碼檢查是否: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"));
注意!如果沒有表列出,你正在使用MySQL JDBC驅動程序有以下錯誤的是舊版本http://bugs.mysql.com/bug.php?id=20913你應該升級或使用數據庫名稱作爲第一個參數的getTables
不適用於我。我沒有輸出。 – 2012-07-30 21:56:37
然後你使用錯誤的名字。只需打印出你從resultSet得到的所有內容。更新示例以顯示如何。 – anttix 2012-07-30 22:00:57
答案的調試部分不起作用。它需要更正。將要搜索表的數據庫的名稱作爲第一個參數。即,resultSet = metadata.getTables(TheDataBaseNameGoesHere,null,「%」,null); – 2012-07-30 22:25:29
使用Connection.getMetaData(),並使用返回的對象來獲取目錄,模式,表和列。
查找表:
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 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");
}
http://stackoverflow.com/questions/5679259/how-to-get-list-of-databases-schema-names-of-mysql-using-java-jdbc – 2012-07-30 21:26:03