2012-07-28 89 views
10

我想製作一個簡單的java代碼來檢查MySQL數據庫中是否存在表和/或列。我應該使用Java代碼來執行檢查或創建一個SQL查詢字符串並執行檢查嗎?如何檢查數據庫中是否存在表或列?

編輯 -

@ aleroot -

我試着用你的代碼,如下圖所示。當我運行下面的代碼時,我沒有看到任何表或列。我只看到這個 -

Driver Loaded. 
Got Connection. 

我的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 !"); 
    } 
    } 

} 
+0

進行查詢並檢查它是否成功。如果是,你知道表/列存在。 – ATaylor 2012-07-28 07:38:26

+0

你使用的是JDBC嗎? – 2012-07-28 07:41:05

+0

@FranciscoSpaeth - 是的,它的jdbc – 2012-07-28 09:16:21

回答

26

要檢查是否存在表中,你可以以這種方式使用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 
    } 
+0

爲DatanaseMetaData +1的 – 2012-07-28 08:32:56

+4

@aleroot - 代碼不適用於我:( – 2012-07-28 22:48:27

+1

如果此代碼不起作用,嘗試使用全部大寫字母(大寫字母)作爲你的table_name – 2016-08-08 16:03:16

0

知道你可以使用下面的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!"); 
} 
... 
+0

它不會支持不支持SHOW的數據庫(如MSSQL)...... – aleroot 2012-07-28 08:24:54

+0

@aleroot這很明顯,我不擔心它,因爲問題是關於MySQL數據庫;)但即使如此,謝謝我將添加評論我的回答 – 2012-07-28 08:30:19

+0

是的,第一次沒有注意到,我現在添加了MySQL標記。謝謝。 – aleroot 2012-07-28 08:31:49

1
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)。

0

在Apache中Derby(SQL)

Eg檢查列是否存在:

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> 
相關問題