0

Play Frameworkとpostgresqlスキーマのマルチテナンシーに対処する方法を探していたところ、この記事を ここで見つけました。
問題は、プレイ中にプレーンSQLステートメントを実行する方法を理解できないことです(私は完全に初心者です)、誰か助けてもらえますか?

4

2 に答える 2

1

実際には、生のjdbcオブジェクトを取得するのに役立つDBオブジェクトがあります。クエリがパラメータのない単純な更新である場合は、次のことができます

DB.execute(simpleUpdate)

クエリがパラメータのない単純な選択である場合は、次のことができます

DB.executeQuery(simpleSelect)

パラメータを使用してより複雑なものがある場合は、接続を直接取得することで、PreparedStatementを使用できます。

PreparedStatement deleteStmt = DB.getConnection().prepareStatement(myStatement);
try {
    deleteStmt.setString(1, myString);
    deleteStmt.executeUpdate();
} finally {
    deleteStmt.close();
}
于 2012-10-03T06:52:08.977 に答える
0

スキーマを使用してPostgresデータベースをシャーディングします。これは私たちが思いついた解決策です。application.confに複数のDB接続を追加し、カスタムSQLで接続を初期化します。

# application.conf
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost/mytest"
db.default.user=your_user
db.default.password=passwd
db.default.initSQL="SET timezone = 'UTC';"

db.tp0.driver=org.postgresql.Driver
db.tp0.url="jdbc:postgresql://localhost/mytest"
db.tp0.user=your_user
db.tp0.password=passwd
db.tp0.initSQL="SET search_path TO tp0, public;SET timezone = 'UTC';"

Javaコード

EbeanServer tp0 = Ebean.getServer("tp0");
List<moneylog> res = tp0.find(moneylog.class).findList();
于 2014-12-04T15:01:59.000 に答える