14

我是 JDBC 新手,我想知道是否有办法检查 MySQL 中是否已经存在特定数据库。

假设我想创建一个名为学生的数据库,如果学生数据库已经在 MySQL 中创建,则 Eclipse 中的错误消息会指出这个学生数据库已经存在。但是我想做的是创建一个布尔方法来检查学生数据库是否已经存在。如果存在,则布尔方法将返回 false,否则返回 true,然后我可以创建学生数据库。我如何在 Java 中执行这些操作?JDBC 中是否有任何方法可以做到这一点,或者我需要从头开始编写代码?

编辑 2

我遵循了mguymons的建议,这就是我想出的

public boolean checkDBExists(String dbName){

    try {
        Class.forName(JDBCDriver); //Register JDBC Driver
        
        System.out.println("Creating a connection...");
        conn = DriverManager.getConnection(DBURL, USER, PASS); //Open a connection
    
        ResultSet resultSet = conn.getMetaData().getCatalogs();
        
        while (resultSet.next()) {
        
          String databaseName = resultSet.getString(1);
            if(databaseName.equals(dbName)){
                return true;
            }
        }
        resultSet.close();

    }
    catch(Exception e){
        e.printStackTrace();
    }
    
    return false;
}
4

4 回答 4

21

您可以使用DatabaseMetaData#g​​etCatalogs从JDBC 连接获取该信息,这里是获取目录的示例,也就是数据库名称

// Connection connection = <your java.sql.Connection>
ResultSet resultSet = connection.getMetaData().getCatalogs();

//iterate each catalog in the ResultSet
while (resultSet.next()) {
  // Get the database name, which is at position 1
  String databaseName = resultSet.getString(1);
}
resultSet.close();
于 2012-09-13T21:04:09.527 回答
8
show databases like 'students'

如果你得到一行回来,它存在。

于 2012-09-13T20:54:24.933 回答
3

在较新版本的 MySQL(5 及更高版本)中运行此查询:

SELECT COUNT(*)
FROM information_schema.tables 
WHERE table_schema = '[database name]' 
AND table_name = '[table name]';

如果结果为 1,则存在。

在 Java JDBC 中看起来像这样:

// Create connection and statement
String query = "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema'[database name]' AND table_name = '[table name]'";
ResultSet rs = stmt.executeQuery(query);                  
rs.next();
boolean exists = rs.getInt("COUNT(*)") > 0;
// Close connection, statement, and result set.
return exists;   
于 2012-09-13T20:56:08.853 回答
2

你是从头到尾做的。正确的技术是尝试创建它并捕获异常。您想要执行的方式受时间窗口问题的影响:测试时它不存在,但是当您尝试创建它时它就存在。无论如何,您仍然必须捕获异常。

于 2012-09-13T22:07:24.743 回答