2012-12-06 43 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()返回所有的數據庫。 –

相關問題