[英]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.