私のJAVAプログラムには、ファイルからPostgresデータベースにデータをコピーできる次のコードがあります。
Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:####/myDb",
"myuser", "mypassword");
CopyManager cm = new CopyManager((BaseConnection) con);
cm.copyIn("COPY prices FROM STDIN WITH DELIMITER AS ','",
new BufferedReader(new FileReader(filepath)), buffersize);
このコードは正常に機能しますが、このコードを多数のファイルに対して実行しているため、接続プールを使用して接続を管理したいと思います。そこで、C3P0を使用しました。
public static final ComboPooledDataSource cpds = new ComboPooledDataSource();
public class MyPooledConnection {
MyPooledConnection() throws PropertyVetoException {
cpds.setDriverClass("org.postgresql.Driver");
cpds.setJdbcUrl("jdbc:postgresql://localhost:5432/myStockDatabase");
cpds.setUser("myUserName");
cpds.setPassword("myPassword");
cpds.setInitialPoolSize(4);
cpds.setMinPoolSize(4);
cpds.setMaxIdleTime(30);
cpds.setMaxPoolSize(MAX_CONNECTIONS);
}
public static Connection getConnection() {
return cpds.getConnection();
}
}
ただし、上記の接続プールから接続を取得し、以下の例のようにCopyManagerで使用しようとすると、コードが機能しません
Connection pooled_con = MyPooledConnection.getConnection();
CopyManager cm = new CopyManager((BaseConnection) pooled_con);
cm.copyIn("COPY prices FROM STDIN WITH DELIMITER AS ','",
new BufferedReader(new FileReader(filepath)), buffersize);
接続に問題があると思いますが、どう違うのかわからないようです。SQLExceptionとIOExceptionでエラーをキャッチしようとしましたが、どちらもキャッチしません。誰かがこれに遭遇しましたか?
----更新----
a_horse_with_no_nameに感謝します。これに関するガイダンス。次のコードは私のために働いた
// Cast the connection as a proxy connection
C3P0ProxyConnection proxycon = (C3P0ProxyConnection)cpds.getConnection();
try {
// Pass the getCopyAPI (from PGConnection) to a method
Method m = PGConnection.class.getMethod("getCopyAPI", new Class[]{});
Object[] arg = new Object[] {};
// Call rawConnectionOperation, passing the method, the raw_connection,
// and method parameters, and then cast as CopyManager
CopyManager cm = (CopyManager) proxycon.rawConnectionOperation(m,
C3P0ProxyConnection.RAW_CONNECTION,arg);
cm.copyIn("COPY prices FROM STDIN WITH DELIMITER AS ','", new BufferedReader(new
FileReader(filepath)), buffersize);
} catch (NoSuchMethodException | IllegalAccessException
| IllegalArgumentException | InvocationTargetException e) {
// Deal with errors here
}