2011-10-21 6 views
0

にセルを変換する私は、次のJavaコードを持っている:(パラメータは、データがデータベースのクエリとしてaswellログインしている)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("DB_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"); 
    Connection connection = DriverManager.getConnection(url, username, password); 

    try { 
     Statement stmt = connection.createStatement(); 

     try { 
      ResultSet rset = stmt.executeQuery(query); 
      try { 
       while (rset.next()) { 
        System.out.println(rset.getString(1)); 
       } 
      } finally { 
       try { 
        rset.close(); 
       } catch (Exception ignore) { 
       } 
      } 
      return rset; 
     } finally { 
      try { 
       stmt.close(); 
      } catch (Exception ignore) { 
      } 
     } 
    } finally { 
     try { 
      connection.close(); 
     } catch (Exception ignore) { 
     } 
    } 
} 

コードは、データベースから一つのセルを取得することになっています。クエリは、結果がコンソールに与えられたときに機能します。しかし、私はプロセスを自動化するために、メソッドから別のメソッドにセルを戻したいと思います。しかし、戻り値は次のようなコードです。jdbc:oracle:OracleDriver#........。だから、誰でもこれを解決するのに役立ちます、私はちょうど番号を含む1つのセルを返すしたいです。

+0

を持って問題を解決しましたところで、私はそれをいくつかのユーティリティ関数/ etcでラップすることを検討しました。それが立てば、その目的は埋もれており、識別することは困難です。 –

+0

あなたのメソッドは 'String'を返すように定義されていますが、(閉じた!)' ResultSet'を返しています。私には分かりません。 –

答えて

0

if(rset.next()) { 
    return rset.getString(1); 
} 

にして削除私は、このコードは、私が

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("DB_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"); 
    Connection connection = DriverManager.getConnection(url,username,password); 
    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) {} 

    } 
} 
2

文字列を印刷する代わりに、それを返します。今すぐ結果セットの文字列表現を返しています。

+0

これは 'return rset'の代わりに' return rset.getString(1) 'です –

1

変更

while (rset.next()) 
     System.out.println(rset.getString(1)); 
} 

return rset; 
+0

私はこのステートメントを変更しましたが、今は明らかにコードに入っているか、voidに変わったときにリターンを追加するよう指示していますが、戻り値を削除する – Eve

+0

メソッドの最後に 'return null;'を追加します – hkn

+1

すべての実行パスに 'return'が必要です。したがって、nullブロックまたは空の文字列をelseブロックに戻します。 – MatBailie