2016-04-05 5 views
0

Ich wollte wissen, wie Tabellen aus beiden Schemas (in diesem Beispiel sagen wir Welt und World2), durch JSF. Ich kann mich mit einem bestimmten Schema in meiner Anwendung anmelden und die Tabellen aus diesem Schema anzeigen, aber ich weiß nicht, wie ich mich anmelden und ein anderes Schema anzeigen kann. (ex. einloggen als world, view world2 schema tabellennamen.)View Tabellennamen aus allen Schema in MySql mit Java

Also ich möchte fragen, ob es eine Möglichkeit gibt, Tabelliste neu zu schreiben, oder vielleicht den Code um SQL-Anfragen zu behandeln, obwohl die Verbindung für eine bestimmte ist Schema.

Ich verwende Derzeit:

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; 
} 

mit folgenden Verbindung:

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; 

} 

Danke.

Antwort

0

Wenn Sie gegen Oracle arbeiten und Zugriff auf die Systemtabellen haben, können Sie Tabellen daraus abrufen mit "select user, Tabellenname aus system.all_tables Wo user in ('myuser1', 'myuser2');"

Wenn Sie alles wollen, können Sie gegen ALL_OBJECTS gehen, wo Typ in ‚TABLE‘, ‚VIEW‘ (und Verfahren und Auslöser und ...)

Wenn Sie gegen verschiedene Datenbanken gehen werden, würden Sie dann um zu bestimmen, wo und was die Datenwörterbücher für jeden DB sind und schreibe Code für jeden einzelnen.

DOH - Sie haben erklärt, MySQL im Titel:

wählen table_schema, table_name aus INFORMATION_SCHEMA.TABLES wo table_schema in ('myfirstone', 'mysecondone');

+0

Vielen Dank, ich konnte ELECT table_name verwenden FROM information_schema.tables WHERE table_type = 'Basistabelle' UND table_schema in ('1,' 2 '); um die Tabellennamen zu erhalten. Ich hatte ein bisschen Versuch und Irrtum, "information_schema.tables" zu ändern und erkannte meinen Fehler. – jni4

Verwandte Themen