में C3PO कनेक्शन पूल मैं अपने जावा प्रोग्राम में अनुवर्ती कोड है कि मुझे मेरे Postgres डेटाबेस में एक फ़ाइल से डेटा कॉपी करने की अनुमति देता है:प्रतिलिपि से और 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 के साथ त्रुटि को पकड़ने का प्रयास किया है, लेकिन यह या तो पकड़ नहीं है। क्या किसी ने इसका सामना किया है?
---- UPDATED ----
धन्यवाद इस पर मार्गदर्शन 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
}
त्रुटि का पूरा स्टैक ट्रेस है? आप एक कन्स्ट्रक्टर से स्थिर क्षेत्र क्यों शुरू कर रहे हैं? और आपको क्या लगता है कि सी 3 पी 0 द्वारा लौटाए गए कनेक्शन बेसकनेक्शन के उदाहरण हैं (जो भी हो सकता है?) –
काम करने से आपका क्या मतलब है? किसी भी प्रकार का कोई अपवाद फेंक दिया गया है? क्या यह लटका है? – AHungerArtist
@AHungerArtist: "काम नहीं करता" जैसा कि फ़ाइल में डेटा में तालिका में कॉपी नहीं किया गया है। कोई अपवाद फेंक दिया गया है, न ही यह लटका है; यह अभी भी जारी है जैसे कोड निष्पादित किया गया था। – Jaycal