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

Posted

技术标签:

【中文标题】JAVA建立连接后如何检查数据库是不是存在【英文标题】: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 【参考方案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();
    

请注意两件事

    新的驱动类是`com.mysql.cj.jdbc.Driver' 查询 CREATE DATABASE IF NOT EXISTS DBNAME 意味着您不必检查数据库是否存在

【讨论】:

以上是关于JAVA建立连接后如何检查数据库是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

如何检查Java中是不是存在互联网连接?

我如何使用java检查sql server中的数据库名称是不是已经存在? [复制]

如何检查关系是不是已建立 - Core Data

Elasticsearch Java高级REST客户端建立一堆TCP连接,并且在放入数据后不要关闭该连接

如何检查数据库中是不是存在表或列?

如何从rails env检查mysql数据库的存在位置?