0
おはよう、C3P0 1台の複数のデータベース
タイトルは、接続プールを使用して同じMysqlサーバー上の異なるデータベースに接続するソリューションを作成したいとしています。私は、次の記事で示されている手順に従っている:
https://stackoverflow.com/questions/26785842/multiple-data-sources-for-c3p0
私のソリューションはこれです:
public class DatabaseUtility
{
public static ComboPooledDataSource getDataSource(String db, String user, String pass) throws PropertyVetoException
{
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setJdbcUrl("jdbc:mysql://X.X.X.X:3306/"+db);
cpds.setUser(user);
cpds.setPassword(pass);
// Optional Settings
cpds.setInitialPoolSize(5);
cpds.setMinPoolSize(5);
cpds.setAcquireIncrement(5);
cpds.setMaxPoolSize(20);
cpds.setMaxStatements(100);
return cpds;
}
public static void main(String[] args) throws SQLException
{
Connection connection = null;
PreparedStatement pstmt = null;
ResultSet resultSet = null;
try
{
//QUERY to DATABASE 1
ComboPooledDataSource dataSource = DatabaseUtility.getDataSource("bd1", "user1", "pass1");
connection = dataSource.getConnection();
pstmt = connection.prepareStatement("SELECT * FROM municipio");
System.out.println("The Connection Object is of Class: " + connection.getClass());
resultSet = pstmt.executeQuery();
while (resultSet.next())
{
System.out.println(resultSet.getString(1) + "," + resultSet.getString(2) + "," + resultSet.getString(3));
}
//QUERY to DATABASE 2
dataSource = DatabaseUtility.getDataSource("bd2", "user2", "pass2");
connection = dataSource.getConnection();
pstmt = connection.prepareStatement("SELECT * FROM alojamiento");
System.out.println("The Connection Object is of Class: " + connection.getClass());
resultSet = pstmt.executeQuery();
while (resultSet.next())
{
System.out.println(resultSet.getString(1) + "," + resultSet.getString(2) + "," + resultSet.getString(3));
}
}
catch (Exception e)
{
connection.rollback();
e.printStackTrace();
}
}
}
私はデータベースに接続するたびに、私は特定の接続文字列を持つコンストラクタを呼び出します。
これは効率的なソリューションである、または私は何か間違ったことをやっている場合しかし、私は...
P.S.を疑問を持っています私はSpringを使わないプロジェクトを使用しています。
私はあなたのアドバイス、事前のおかげで、
挨拶をいただければ幸いです。
本当にありがとうございます!私はそれを試して、それは完全に動作します! –