# Wie stellt man fest ob Datenbank existiert?



## mh10 (10. April 2006)

Hallo!

Habe ein Problem. Und zwar möchte ich mit java abfragen, ob eine bestimmte Datenbank (in mySQL) existiert. Wenn sie nicht existiert soll sie aus dem Java Programm erstellt werden.
Kennt sich damit jemand aus?
Vielen Dank im Voraus


----------



## Thomas Darimont (10. April 2006)

Hallo!

So erhaelst du die Liste der in der jeweiligen Datenbankinstanz registrierten Datenbanken.

```
/**
 * 
 */
package de.tutorials;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

/**
 * @author tom
 * 
 */
public class DatabaseCatalogExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {

        Connection connection = initConnection();
        DatabaseMetaData databaseMetaData = connection.getMetaData();
        ResultSet resultSet = databaseMetaData.getCatalogs();

        while (resultSet.next()) {
            System.out.println(resultSet.getString("TABLE_CAT"));
        }

        resultSet.close();
        connection.close();
    }

    private static Connection initConnection() throws Exception {
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setUser("root");
        dataSource.setPassword("");
        dataSource.setServerName("localhost");
        dataSource.setPort(3306);
        dataSource.setDatabaseName("test");
        return dataSource.getConnection();
    }
}
```

Gruss Tom


----------



## mh10 (10. April 2006)

Hallo Tom

Erstmals danke für deine Hilfe.
Ich hab nur das Problem, dass ich Datenbank unabhängig sein muss.
Also mittles Factory Pattern bekomm ich aufgrund eines Property Files die richige Connection. (Unterstützung für Access, Oracle und MySQL)
Weisst du wie das geht?
mfg


----------



## Thomas Darimont (10. April 2006)

Hallo!

Ein einfacher "flexibler" Mechanismus zum Austausch der Datenbank könnte beispielsweise so aussehen:


```
/**
 * 
 */
package de.tutorials;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;

/**
 * @author Tom
 * 
 */
public interface IConnectionFactory {
    Connection createConnection(String server, int port, String databaseName,
            String username, String password, Map optionalArguments) throws SQLException;
}
```

Die Implementierung für MySQL:

```
/**
 * 
 */
package de.tutorials.impl;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import de.tutorials.IConnectionFactory;

/**
 * @author Tom
 *
 */
public class MySQLConnectionFactoryImpl implements IConnectionFactory{

    public Connection createConnection(String server, int port, String databaseName, String username, String password, Map optionalArguments) throws SQLException{
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setServerName(server);
        dataSource.setPort(port);
        dataSource.setDatabaseName(databaseName);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        return dataSource.getConnection();
    }
}
```

Verwendungsbeispiel

```
/**
 * 
 */
package de.tutorials;

import java.sql.Connection;
import java.util.HashMap;
import java.util.Properties;

/**
 * @author Tom
 * 
 */
public class ConnectionFactoryExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Properties properties = new Properties();
        properties.load(ConnectionFactoryExample.class.getClassLoader()
                .getResourceAsStream("database.properties"));

        IConnectionFactory connectionFactory = (IConnectionFactory) Class
                .forName(((String) properties.get("database.factory.class")))
                .newInstance();
        
        Connection connection = connectionFactory.createConnection("localhost", 3306, "test", "root", "", new HashMap());
        //do something
        connection.close();
    }
}
```

Unser database.properties: (einfach in den Classpath legen)

```
database.factory.class=de.tutorials.impl.MySQLConnectionFactoryImpl
#database.factory.class=de.tutorials.impl.OracleConnectionFactoryImpl
```

Gruß Tom


----------

