2016-04-05 6 views
0

JSFを使用して、両方のスキーマ(この例ではworldとworld2)から表を表示する方法を知りたかったのです。指定されたスキーマを使用してアプリケーションにログインし、そのスキーマからテーブルを表示できますが、ログインして別のスキーマを表示する方法がわかりません。 (例えばworldとしてログインしてworld2のスキーマテーブル名を表示する)表を表示するJavaを使用するMySqlのすべてのスキーマからの名前

だから、テーブルリストを書き直す方法があるのか​​、あるいは特定の接続があってもSQLクエリを扱うためにコードを再利用する方法があるかどうか尋ねたいスキーマ

現在、私は使用しています:

public TableList[] getTableList() { 
    try { 
     String[] TABLE_TYPES = { "TABLE", "VIEW" }; 
     DatabaseMetaData databaseMetaData; 
     String query = ""; 

     // st = conn.createStatement(); 
     st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
       ResultSet.CONCUR_UPDATABLE); 
     databaseMetaData = conn.getMetaData(); 
     rs = databaseMetaData.getTables(null, dbaseBean.getUserName(), 
       null, TABLE_TYPES); 
     rs.last(); 
     int count = rs.getRow(); 
     tableList = new TableList[count]; 
     rs.beforeFirst(); 
     int i = 0; 
     while (rs.next()) { 
      tableList[i] = new TableList(rs.getString("TABLE_NAME")); 
      i++; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     FacesMessage msg = new FacesMessage("" + " Error Occured"); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 
    setTableList(tableList); 
    return tableList; 
} 

を次の接続で:

public boolean connect() { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    Map<String, Object> m = context.getExternalContext().getSessionMap(); 
    messageBean = (MessageBean) m.get("messageBean"); 
    dbmsUserBean = (DbmsUserBean) m.get("dbmsUserBean"); 
    userName = dbmsUserBean.getUserName(); 
    password = dbmsUserBean.getPassword(); 

    switch (dbmsUserBean.getDbms().toLowerCase()) { 

    case "mysql": 
     jdbcDriver = "com.mysql.jdbc.Driver"; 
     url = "jdbc:mysql://" + dbmsUserBean.getDbmsHost() + ":3306/" 
       + dbmsUserBean.getDatabaseSchema(); 
     break; 

    case "db2": 
     jdbcDriver = "com.ibm.db2.jcc.DB2Driver"; 
     url = "jdbc:db2://" + dbmsUserBean.getDbmsHost() + ":50000/" 
       + dbmsUserBean.getDatabaseSchema(); 
     userName = userName.toUpperCase(); 
     break; 

    case "oracle": 
     jdbcDriver = "oracle.jdbc.driver.OracleDriver"; 
     url = "jdbc:oracle:thin:@" + dbmsUserBean.getDbmsHost() + ":1521:" 
       + dbmsUserBean.getDatabaseSchema(); 
     userName = userName.toUpperCase(); 
     break; 

    case "odbc": 
    default: 
     // 
     break; 
    } // end switch 

    try { 
     // register driver 
     Class.forName(jdbcDriver); 
     // get connection 
     connection = DriverManager.getConnection(url, userName, password); 
     // get SQL statement object instance 
     statement = connection.createStatement(
       ResultSet.TYPE_SCROLL_INSENSITIVE, 
       ResultSet.CONCUR_UPDATABLE); 

     // retrieve DB meta data 
     databaseMetaData = connection.getMetaData(); 

     DbaseBean dbaseBean = new DbaseBean(); 
     dbaseBean.setConnection(connection); 
     dbaseBean.setDatabaseMetaData(databaseMetaData); 
     dbaseBean.setJdbcDriver(jdbcDriver); 
     dbaseBean.setUserName(userName); 
     dbaseBean.setPassword(password); 
     dbaseBean.setUrl(url); 
     dbaseBean.setResultSet(resultSet); 
     m.put("dbaseBean", dbaseBean); 

     status = true; 
    } 

    catch (ClassNotFoundException e) { 
     // assumes there is a corresponding printException method 
     // PrintException("Connect: Class not found Exception - could not loadJDBC driver"); 
     status = false; 
    } 

    catch (SQLException e) { 
     // printException(e,"Connect: SQLException information"); 
     status = false; 
    } catch (Exception e) { 
     // printException(e,"Connect: Exception information"); 
     status = false; 
    } 

    return status; 

} 

ありがとうございました。

答えて

0

システム・テーブルへのアクセス権がある場合は、「select user、table_name from system.all_tables」と入力してテーブルを取得できます。ここで、( 'myuser1'、 'myuser2');

あなたはすべてのものをしたい場合、あなたは別のデータベースに逆行している場合は「TABLE」を入力し、「表示」(および手続き及びトリガと...)

、あなたが持っているでしょうALL_OBJECTS逆らうことができます各DBのデータ・ディクショナリーがどこにどのようなものであるかを判断し、各DBのデータ・ディクショナリーを判別します。

DOH - あなたはタイトルにMySQLを次のように述べています

選択TABLE_SCHEMAを、( 'myfirstone'、 'mysecondone')でTABLE_SCHEMA INFORMATION_SCHEMA.TABLESからTABLE_NAMEを。

+0

ありがとうございました。私はELECT table_name FROM information_schema.tablesを使用できました。WHERE table_type = 'ベーステーブル' AND table_schema in ''、 '2');テーブル名を取得します。私は少し試行錯誤して "information_schema.tables"を変更し、私の間違いを認識しました。 – jni4

関連する問題