2012-03-07 12 views
0

Oracleデータベースにアクセスしようとしています。以下のコードを参照してください。データベースへのアクセスの再開性

問題は、データベースがクラスタDBであるため、一方がダウンしている場合は、もう一方にアクセスできます。現在、1つのノードに留まる問題がありますので、Javaコードを更新することは可能ですか?

私は、プロパティーファイルを使用して、データベースに信任状を挿入しています。接続が確立されると、クエリが入力され、結果が返されます。

public static String connectDB(String configFile, String query) throws FileNotFoundException, IOException, SQLException, ClassNotFoundException{ 
    Properties p = new Properties(); 
    p.load(new FileInputStream(configFile)); 

    String serverName = (p.getProperty("RMS_DBServerName")); 
    String portNumber = (p.getProperty("RMS_PortNumber")); 
    String sid = (p.getProperty("RMS_SID")); 
    String url = "jdbc:oracle:thin:@//" + serverName + ":" + portNumber + "/" + sid; 
    String username = (p.getProperty("RMS_Username")); 
    String password = (p.getProperty("RMS_Password")); 

    Class.forName("oracle.jdbc.driver.OracleDriver"); 
    sleep(10); 
    Connection connection = DriverManager.getConnection(url,username,password); 
    sleep(5); 
    String setr = null; 
    try {  
     Statement stmt = connection.createStatement(); 
     try { 
      ResultSet rset = stmt.executeQuery(query); 
      try { 
        while(rset.next()) 
        setr = rset.getString(1); 
        return setr; 
      }   
      finally { 
       try { 
        rset.close(); 
       } 
       catch (Exception ignore) {} 
      } 
     } 
     finally { 
      try { 
       stmt.close(); 
      } 
      catch (Exception ignore) {} 
     } 
    } 
    finally { 
     try { 
      connection.close(); 
     } 
     catch (Exception ignore) {} 
    } 
} 

答えて

0

私はあなたを理解してないんだけど、「データベースアクセスエラーが発生した場合、」java.​sql.​DriverManagerSQLExceptionをスローします。

public static String connectDB(String configFile, String query) 
    try{ 
     Connection connection = DriverManager.getConnection(url,username,password); 
    } catch (SQLException ex) { 
    sleep(10); 
    connectDB(configFile,query); // try to connect again 
    } 

またはかなったような:

//dbPrefix is something that you put before name of every property associated to given node in your config file. 
public static String connectDB(String configFile, String dbPrefix, String query) ... { 
... 
    String serverName = (p.getProperty(dbPrefix + "RMS_DBServerName")); 
     String portNumber = (p.getProperty(dbPrefix + "RMS_PortNumber")); 
     String sid = (p.getProperty(dbPrefix + "RMS_SID")); 
     String url = "jdbc:oracle:thin:@//" + serverName + ":" + portNumber + "/" + sid; 
     String username = (p.getProperty(dbPrefix + "RMS_Username")); 
     String password = (p.getProperty(dbPrefix + "RMS_Password")); 
... 

     try{ 
      Connection connection = DriverManager.getConnection(url,username,password); 
     } catch (SQLException ex) { 
     sleep(10); 
     connectDB(configFile,dbPrefix,query); // try to connect again, use different node 
     } 
ですから、基本的には同様STHを行うことができます
関連する問題