播放框架中的多个数据库

时间:2012-02-03 07:39:36

标签: playframework multiple-databases

我正在尝试与另一台服务器上的另一个数据库建立第二个数据库连接。我们正在使用play framework 1.2.4,我找到了1.2.3的以下文档。

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()

这对我没有用,所以我做了一些搜索,发现了以下文章。 这篇文章告诉我,上面的配置从1.3主分支泄露出来,将来可用......

JPA.getJPAConfig method not found on Play's API

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

有人能给我一种方法对其他数据库做一些简单的查询吗?我想我不是唯一想要使用多个数据库的人。

谢谢!

2 个答案:

答案 0 :(得分:7)

偶尔从其他数据库读取数据,您也可以使用普通的旧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 :(得分:1)

这就是我现在连接到其他数据库的方式,直到有另一种解决方案。

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