2012-12-06 41 views
0

后,我有一个很大的问题... 我有一个数据库中的Java程序的创建。如何检查是否存在数据库或不连接时JAVA

我想知道如果数据库存在与否,以及是否存在只需连接,如果没有创建它。

我这个尝试之一:

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

这是全部代码...

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

THIS IS备用码吧,刚参加工作FOR NOW .... 偏代码可行!

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的://本地主机:3306 /” 撕裂;没有URL是数据库名称... 然后如果数据库不存在那个名称只是创建。

它不工作....不会在else更多的进入,并说Exeption数据库已经存在。

非常感谢你。

+0

您正在使用哪个数据库?发布完整的代码和错误堆栈跟踪 –

+2

这不是一个问题。它也缺少一些重要的信息,比如你用来连接数据库的API,示例代码等等。 – Uli

+0

*'FILE dbName = new FILE(url); ...如果(dbName.exists()== true ...不工作...'*:*** Headpalm *** –

回答

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 
+0

感谢这个答案,但问题是我不想用Exceptions。 如果你明白我想要CLEAN,我想在连接之后知道数据库是否存在,然后如果数据库存在,只是打印一条消息,如果不是那么: sql =(CREATE DATABASE“+ DbName); stmt.executeUpdate(sql); – SanRyu

+1

呵呵?!为什么不呢?没有什么臭或痒。绝对正常。 –

2

不知道太多关于正在发生的事情在这里只是试图连接到不存在应该抛出一个TimeoutException错误或类似的数据库。如果你无法连接,赶上例外并做些事情。

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

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

享受你的一天!

+0

感谢您的答案,但问题是我没有建立连接与DbName在URL中,我首先连接到服务器,然后我想连接到数据库如果exista。我想要清理如果你明白,我想在连接后知道数据库是否存在,然后如果数据库的存在只是打印一条消息,如果不是那么:sql =(CREATE DATABASE“+ DbName); stmt.executeUpdate(sql); – SanRyu

+0

好吧......建立连接,然后从java.sql.Connection调用getMetaData()然后调用getCatalogs()返回所有的数据库。 –

相关问题