2016-05-02 9 views
0

Ich möchte eine Datei in PostgreSQL mit Tomcat laden:Cast java.sql.Connection zu PGConnection

PGConnection pgCon = ((org.apache.commons.dbcp.DelegatingConnection) conn).getInnermostDelegate(); 

ich

:

@Resource(name = "jdbc/DefaultDB") 
private DataSource ds; 
Connection conn = ds.getConnection(); 

ich das conn Objekt auf diese Weise zu werfen versucht

Ich habe auch versucht:

Connection unwrap = conn.unwrap(Connection.class); 
connSec = (org.postgresql.PGConnection) unwrap; 

ich

java.sql.SQLException: Cannot unwrap to org.postgresql.PGConnection 

LargeObjectManager pgCon = pgCon.getLargeObjectAPI(); 

Was ist der richtige Weg ist, den Code zu implementieren?

PS

Ich versuchte dies:

PGConnection pgConnection = null; 

if (conn.isWrapperFor(PGConnection.class)) 
{ 
    pgConnection = conn.unwrap(PGConnection.class); 
} 

LargeObjectManager lobj = pgConnection.getLargeObjectAPI(); 

Aber ich bekomme NPE an dieser Linie LargeObjectManager lobj = pgConnection.getLargeObjectAPI();

+0

Sie erkennen Sie, dass Sie nicht das 'LargeObjectAPI' gerade brauchen zu setzen Dateien in die Datenbank, richtig? Es sollte in seltenen Fällen verwendet werden, in denen ein niedriger Zugriff erforderlich ist. Wenn Sie nur Dateien in einer Datenbank speichern möchten, können Sie 'PreparedStatement.setBinaryStream()' und 'ResultSet.getBinaryStream()' verwenden, um sie abzurufen. – Kayaman

+0

Nun, es wird gut, wenn es eine solche Lösung für Java und PostgreSQL gibt. Ich suchte im Internet, fand aber meist Beispiele mit einem eigenen JDBC-Treiber. Können Sie bitte osme Beispiele teilen? –

+0

Ich habe keine Ahnung, was Sie mit "eigenen JDBC-Treiber" meinen. Es ist die Standard-JDBC-Funktionalität, die in den meisten Datenbanken funktioniert. Jetzt müssen Sie keine Casting- oder Typprüfung der Verbindung mehr durchführen. Sie können viele Beispiele von Google finden. Viel Glück, du wirst eine große Menge davon brauchen. – Kayaman

Antwort

2
if (dataSource.getConnection().isWrapperFor(PGConnection.class)) { 
    PGConnection pgConnection = dataSource.getConnection().unwrap(PGConnection.class); 
} 
+0

Ich habe diesen Vorschlag ausprobiert, aber ich bekomme NPE in dieser Zeile: 'LargeObjectManager lobj = pgConnection.getLargeObjectAPI();' –

+0

Sie verlieren Verbindungen. Die Verbindung vom 'if' wird nie geschlossen –

+0

Können Sie mir bitte ein Beispiel zeigen, wie man es beheben kann? –