简体   繁体   中英

How to check if a particular database in mysql already exists using java

I am new in JDBC and I wanted to find out if there is a way to check if a particular database already exists in MySQL.

Let's say I wanted to create a database named students, if the students database is already created in MySQL an error message in eclipse would state that this students database already exists. However what I wanted to do is to create a boolean method to check if students database already exists. If it exists then boolean method would return false otherwise its true then I can create students database. How do I do these in Java? Are there any methods in JDBC that does this or do I need to code it from scratch?

EDIT 2

I followed mguymons suggestion and this is what I came up

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;
}

You can get that info from a JDBC Connection using DatabaseMetaData#getCatalogs , here is an example of getting the Catalogs, aka Database names

// 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();
show databases like 'students'

如果你回来一行,它就存在了。

In newer versions of MySQL (5 and above) run this query:

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

If the result is 1 it exists.

In Java JDBC that would look something like this:

// 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;   

You're doing it back to front. The correct technique is to try to create it and catch the exception. The way you want to do it is subject to timing-window problems: it wasn't there when you tested, but it was there when you tried to create it. And you still have to catch the exception anyway.

You should break out of the loop once the target database is found. Otherwise, it's only sensible of your target search is the last in the resultset.

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;
            break;
        }
    }
    resultSet.close();

}
catch(Exception e){
    e.printStackTrace();
}

return false;

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM