2012-02-03 7 views
9

Próbuję ustanowić drugie połączenie z bazą danych z inną bazą danych na innym serwerze. Używamy platformy gry 1.2.4 i znalazłem następującą dokumentację dla 1.2.3.Wiele baz danych w strukturze gry

http://www.playframework.org/documentation/1.2.3/model#multiple

application.conf: 
db_other.url=jdbc:mysql://localhost/test 
db_other.driver=com.mysql.jdbc.Driver 
db_other.user=root 
db_other.pass= 

Connection conn = DB.getDBConfig("other").getConnection() 

To nie pracował dla mnie tak zrobiłem trochę więcej szukanie i znalazłem następujący artykuł. Ten artykuł powiedział mi, że powyższa konfiguracja wyciekły z gałęzi 1.3 mistrza i będzie dostępna w przyszłości ...

JPA.getJPAConfig method not found on Play's API

https://play.lighthouseapp.com/projects/57987/tickets/706

Może mi ktoś podać sposób, aby zrobić kilka prostych zapytań do tej innej bazy danych? Myślę, że nie jestem jedynym, który chce korzystać z wielu baz danych.

Dzięki!

+0

Dla zapytań do innego db na tym samym serwerze im przy użyciu tego testu list = JPA.em(). createNativeQuery ("SELECT * FROM other_db..TABLE"). getResultList(); w sybase – n4cer

Odpowiedz

7

od czasu do czasu odczytu danych z innej bazy danych, można również używać zwykłego starego JDBC:

Connection c = null; 
    PreparedStatement pstmt = null; 
    ResultSet rs = null; 

    try { 
     String url = "YourJdbcUrl"; 
     Class.forName("YourDriver").newInstance(); 
     c = DriverManager.getConnection(url, "XXX", "XXX"); 
     pstmt = c.prepareStatement("SELECT * FROM TABLE"); 
     rs = pstmt.executeQuery(); 
     while (rs.next()) { 
      // Fill your data into Play Model instances here. 
     } 

    }catch(Exception e){ 
     e.printStackTrace(); 
    } finally { 
     try { if (rs != null) rs.close(); } catch (Exception e) {}; 
     try { if (pstmt != null) pstmt.close(); } catch (Exception e) {}; 
     try { if (c != null) c.close(); } catch (Exception e) {}; 
    } 

    render(...); 
+1

Działa jak urok, dzięki! – dreampowder

1

W ten sposób łączę się z innymi bazami danych, dopóki nie pojawi się inne rozwiązanie.

Connection c = null; 
try { 
    ComboPooledDataSource ds = new ComboPooledDataSource(); 
    ds.setDriverClass("com.sybase.jdbc3.jdbc.SybDriver"); 
    ds.setJdbcUrl("jdbc:sybase:Tds:server:4100/db"); 
    ds.setUser("user"); 
    ds.setPassword("pass"); 
    ds.setAcquireRetryAttempts(10); 
    ds.setCheckoutTimeout(5000); 
    ds.setBreakAfterAcquireFailure(false); 
    ds.setMaxPoolSize(30); 
    ds.setMinPoolSize(1); 
    ds.setMaxIdleTimeExcessConnections(0); 
    ds.setIdleConnectionTestPeriod(10); 
    ds.setTestConnectionOnCheckin(true); 

    DB.datasource = ds; 
    try { 
     c = ds.getConnection(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

    } catch (PropertyVetoException e) { 
     e.printStackTrace(); 
} 

String sql = "SELECT * FROM TABLE"; 

try { 
    PreparedStatement pstmt = c.prepareStatement(sql); 
    ResultSet rs = pstmt.executeQuery(); 

    while (rs.next()) { 
     System.out.println(rs.getString(1)+"\n"); 
    } 

    c.close(); 
} catch (SQLException e) { 
    e.printStackTrace(); 
}