【问题标题】:How to check if a DataBase exist or not after the connection is made JAVAJAVA建立连接后如何检查数据库是否存在
【发布时间】:2012-12-06 12:49:29
【问题描述】:

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

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

我试过这个:

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

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

所以我想破解 2 次和平,1 连接 "jdbc:mysql://localhost:3306/"; WITHOUT URL,即数据库名称 ... 然后,如果那里不存在具有该名称的数据库,则只需创建即可。

它不起作用....没有进入else更多,并说Exeption数据库已经存在。

非常感谢。

【问题讨论】:

  • 您使用的是哪个数据库?发布您的完整代码和错误的堆栈跟踪
  • 这不是问题。它还缺少重要信息,例如您用于连接数据库的 API、示例代码等。请改写。
  • 'FILE dbName = new FILE (url); ... if (dbName.exists() == true ... 不工作...' : Headpalm

标签: java database exists database-engine


【解决方案1】:

如果是 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

【讨论】:

  • 感谢您的回答,但问题是我不希望出现异常。如果你理解我想干净,我想在连接后知道数据库是否存在,然后如果数据库存在就打印一条消息,如果不存在则: sql = (CREATE DATABASE "+DbName); stmt.executeUpdate (sql);
  • 嗯?!为什么不?那没什么臭或痒的。绝对正常。
【解决方案2】:

如果不了解这里发生的情况,只是尝试连接到不存在的数据库应该会引发 TimeoutException 错误或类似的错误。如果无法连接,只需捕获异常并执行操作即可。

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

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

享受你的一天!

【讨论】:

  • 感谢您的回答,但问题是我没有与 URL 中的 DbName 建立连接。我首先连接到服务器,然后我想连接到数据库(如果存在)。如果你理解我想干净,我想在连接后知道数据库是否存在,然后如果数据库存在就打印一条消息,如果不存在则: sql = (CREATE DATABASE "+DbName); stmt.executeUpdate (sql);
  • 好的...建立连接,然后从java.sql.Connection调用getMetaData(),然后调用getCatalogs()返回所有数据库。
【解决方案3】:
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. 查询 CREATE DATABASE IF NOT EXISTS DBNAME 意味着您不必检查数据库是否存在

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多