如何在建立连接JAVA后检查数据库是否存在

时间:2012-12-06 12:49:30

标签: java database exists database-engine

我有一个很大的问题...... 我有一个数据库java程序创建。

我想知道数据库是否存在,if if存在只是连接,如果不存在则创建它。

我试过这个:

if (dbName.exists() == false) {}

这就是所有代码......

Class.forName("com.mysql.jdbc.Driver");
System.out.println("MySQL JDBC driver loaded ok.");

这是它的备用代码,现在只需要工作.... 部分代码可以使用!

conn = DriverManager.getConnection(DBurl + url
+ "?createDatabaseIfNotExist=true& + "
+ "useUnicode=true&characterEncoding=utf-8&user="
+ userName + "&&password=" + password);


System.out.println("Connected to database ");           
System.out.println("Connected to the database " + url);

但我想要好像:

FILE dbName = new FILE (url);
Statement stmt = new Statement;

if (dbName.exists() == true)
   System.out.println("Database exists ! Connecting ... ");
else {
   String sql = "CREATE DATABASE "+url;
   stmt.executeUpdate (sql);
}

我不想将带有密码和用户名的网址放在同一个地方......因为它们是从外部部件提供的,但已经实现并正常工作。

所以我想撕掉2个和平,1连接“jdbc:mysql:// localhost:3306 /”;没有URL,这是数据库名称... 然后,如果数据库不存在,那么名称只能创建。

它不起作用....没有进入else,并说Exeption Database已经存在。

非常感谢你。

3 个答案:

答案 0 :(得分:4)

如果是MySQL数据库,则以下代码应该有效。其他数据库可能会提供不同的错误代码,但一般方法应该是明确的。重要的是您最初连接到实例,而不是特定的数据库。要创建表,您需要连接到新创建的数据库。您不能使用我在示例中使用的实例连接来创建表:

    Connection connection = null;
    Statement statement = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection("jdbc:mysql://localhost/",
                "root", "admin");
        statement = connection.createStatement();
        String sql = "CREATE DATABASE DBNAME";
        //To delete database: sql = "DROP DATABASE DBNAME";
        statement.executeUpdate(sql);
        System.out.println("Database created!");
    } catch (SQLException sqlException) {
        if (sqlException.getErrorCode() == 1007) {
            // Database already exists error
            System.out.println(sqlException.getMessage());
        } else {
            // Some other problems, e.g. Server down, no permission, etc
            sqlException.printStackTrace();
        }
    } catch (ClassNotFoundException e) {
        // No driver class found!
    }
    // close statement & connection

答案 1 :(得分:2)

在不知道这里发生了什么的情况下,只是尝试连接到不存在的数据库应该抛出TimeoutException错误或类似的东西。如果您无法连接,只需捕获异常并执行操作。

boolean canConnect = false;
Connection conn = null;
try{
    conn = DriverManager.getConnection(...);
    canConnect = true;
}(Exception ex){
   canConnect = false;
}

if (!canConnect){
  makeDatabase(...);
}

享受你的一天!

答案 2 :(得分:0)

try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/", "root", "admin");
        Statement statement = connection.createStatement();
        String sql = "CREATE DATABASE IF NOT EXISTS DBNAME";
        statement.executeUpdate(sql);
    } catch (ClassNotFoundException | SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

请注意两件事

  1. 新的驱动程序类为`com.mysql.cj.jdbc.Driver'
  2. 查询如果不存在DBNAME,则创建数据库,这意味着您不必检查数据库是否退出