2012-12-06 7 views
0

큰 질문이 있습니다 ... 데이터베이스 Java 프로그램 생성이 있습니다.연결이 완료된 후 데이터베이스가 존재하는지 여부를 확인하는 방법 JAVA

데이터베이스가 존재하는지 여부를 알고 싶습니다. 존재하지 않는 경우 연결할 수 있습니다. 이것은 지금 일하고 싶은, IT에 대한 백업 코드

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

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

이 모든 코드입니다 ... ... PARTIAL :

나는이 하나를 시도 작동하는 코드!

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 /";을 연결하십시오. 데이터베이스 이름이 ... 인 URL없이 데이터베이스가 존재하지 않는다면 이름이 생성됩니다.

더 이상 입력하지 않아 .... else에 Exeption Database가 이미 있다고합니다.

대단히 감사합니다.

+0

사용중인 데이터베이스가 있습니까? 귀하의 전체 코드와 오류의 스택 추적 게시 –

+2

이것은 질문이 아닙니다. 또한 데이터베이스에 연결하는 데 사용하는 API, 샘플 코드 등과 같은 중요한 정보가 누락되었습니다. Rephrase please. – Uli

+0

* 'FILE dbName = new FILE (url); ... if (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

이 답변을 주셔서 감사합니다. 그러나 문제는 예외가 필요하지 않다는 것입니다.당신이 이해하는 경우 은 내가 데이터베이스가있는 경우 연결이 알고, 다음 데이터베이스는 단지 메시지를 인쇄 존재하는 경우와 그렇지 않은 경우 다음 후 원하는, 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

이 답변을 주셔서 감사합니다. 그러나 문제는 내가 연결을 만들지 않는다는 것입니다. URL 내부에 DbName이 있습니다. 먼저 서버에 연결 한 다음 존재하는 경우 DB에 연결하려고합니다. 이해가된다면 깨끗하게하고 싶습니다. 연결이 끝나면 데이터베이스가 있는지를 확인한 다음 데이터베이스가 존재하면 메시지를 출력하고, 그렇지 않으면 다음을 수행하십시오. sql = (CREATE DATABASE "+ DbName); stmt.executeUpdate (sql); – SanRyu

+0

okay ... 연결을 작성한 후 java.sql.Connection에서 getMetaData() 모든 데이터베이스를 반환하려면 getCatalogs()를 호출하십시오. –