2012-12-13 4 views
7

Ho difficoltà a capire come installare il driver JDBC per PostgreSQL sul mio server debian 6.0. Ho spostato il driver .jar nella directory seguente:PostgreSQL - Installazione del driver JDBC

/usr/local/pgsql/share/java/postgresql.jar. 

Poi i tutorial parlare utilizzando questo codice:

Class.forName("org.postgresql.Driver"); 

Tuttavia, dal momento che io sono nuovo a PostgreSQL non ho idea di dove devo sta mettendo questa linea, o se questo è anche corretto.

La mia domanda è, a meno di spostare il file jar in questa posizione, cosa devo effettivamente fare per installare il driver JDBC sulla mia installazione di postgreSQL?


EDIT: Questa è la mia messa a punto:

Server 1: Tomcat + SOLR

Server 2: PostgreSQL con driver JDBC

SOLR sul server di 1 query postgreSQL sul server 2 tramite il driver JDBC

+1

I driver che implementano la specifica JDBC 4.0 non richiedono più il caricamento manuale della classe driver ('Class.forName (...)'). Quindi, se questo è il tuo caso, dovrebbe essere sufficiente inserire il driver nel percorso di classe come suggerito da @Tomas nella sua risposta. –

+0

Cosa succede se la mia app, in questo caso SOLR, si trova su un server diverso da postgreSQL? Dovrei mettere questo percorso di classe sul server solr? –

+0

Oppure la mia app è Postgresql? –

risposta

5

È consigliabile installare il driver PostgreSQL nella cartella tomcat \ lib. Basta copiare il jar del driver in PATH_TO_TOMCAT \ lib

Non è una buona idea aggiungere cose al sistema CLASSPATH perché si può finire in un caricatore di classe. Ecco un esempio di come si finisce nell'inferno jar/classpath.

  • Supponiamo l'applicazione corrente utilizza postgres 9.1 e si imposta il driver sul classpath di sistema
  • si decide di eseguire un'altra applicazione in quella scatola che parla ad una nuova versione di postgres diciamo versione 9.2
  • Perché stai usando l'app classpath di sistema 2 finirà per usare il vecchio driver perché il percorso di classe SYSTEM tende a prendere la precedenza su un classpath di applicazioni a meno che lo script di avvio dell'app non imposti CLASSPATH = "" per svuotare il classpath di sistema o usi un caricatore di classe personalizzato che non esegue il caricamento di genitore-prima classe.

Vedi http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html

3

Quel driver deve trovarsi sul classpath. È possibile utilizzare questo comando

java -cp /usr/local/pgsql/share/java/postgresql.jar my.app.MainClass 

oppure è possibile copiare la libreria nella struttura del progetto.

Quindi è possibile creare connessioni come dicono i tutorial ...

+0

Grazie per la risposta. Questo è quello che non ottengo però. La mia "app" è SOLR in esecuzione su un altro server. Cosa dovrei usare come app nel tuo esempio? –

+1

@JamesWillson: Se SOLR è la tua "app", dovresti modificare la tua domanda e spiegare la tua configurazione. L'esecuzione incorporata all'interno di un altro framework/contenitore/server comporta una configurazione completamente diversa rispetto all'utilizzo di una piccola app standalone. –

+0

@JamesWillson Se usa Jetty, metti quel driver nella cartella lib di Jetty ... – user219882

1

Nel vostro IDE (Idea, Eclipse, ecc) è necessario aggiungere che il percorso come una libreria.

In alternativa, è possibile compilare ed eseguire dalla riga di comando, se si definisce una variabile CLASSPATH che include quello.

export CLASSPATH=/usr/local/pgsql/share/java/postgresql.jar 
javac -classpath $CLASSPATH MyDBApp.java 
java -cp $CLASSPATH MyDBApp 
1

installare tutti i pacchetti:

# apt-get install libpostgresql-jdbc-java libpostgresql-jdbc-java-doc 

Per impostare Java Environment per tutti gli utenti, aggiungere/modificare/etc/environment:

JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64" 
CLASSPATH=".:/usr/share/java/mysql.jar:/usr/share/java/postgresql-jdbc4.jar" 

Nota: cambia/usr/lib/jvm/java-8-openjdk-amd64 con il tuo JDK

Nota: se avete preferito utilizzare postgresql-jdbc3, sostituire /usr/share/java/postgresql-jdbc4.jar con /usr/share/java/postgresql.jar

alla prova la tua connessione utilizzando questo codice :

import java.sql.Connection; 

import java.sql.DriverManager; 

import java.sql.SQLException; 

import java.util.Properties; 

class TestDB { 

    /* 

     /usr/share/java 

     http://dev.mysql.com/doc/connector-j/5.1/en/ 

     https://jdbc.postgresql.org/documentation/documentation.html 

    */ 

    static Connection conn = null; 

    public static void main(String[] args) { 
     // PostgreSQL 

     try { 

     System.out.println("Loading Class org.postgresql.Driver"); 

     Class.forName("org.postgresql.Driver"); 

     System.out.println("Loading org.postgresql.Driver Successful"); 

     String url = "jdbc:postgresql://localhost/database"; 

     Properties props = new Properties(); 

     props.setProperty("user","user"); 

     props.setProperty("password","password"); 

     props.setProperty("ssl","true"); 

     conn = DriverManager.getConnection(url, props); 

     // or 

     url = "jdbc:postgresql://localhost/database?user=user&password=password&ssl=true"; 

     Connection conn = DriverManager.getConnection(url); 

     // Do something with the Connection 

     System.out.println("Test Connection Successful"); 

     } catch (SQLException ex) { 

     // handle any errors 

     System.out.println("SQLException: " + ex.getMessage()); 

     System.out.println("SQLState: " + ex.getSQLState()); 

     System.out.println("VendorError: " + ex.getErrorCode()); 

     } catch (ClassNotFoundException ex) { 

     System.out.println("Class Not Found: " + ex.getMessage()); 

     } 

    } 

} 

Nota: database di cambiamento, utente e passwrod con la configurazione

http://www.garasiku.web.id/web/joomla/index.php/java/112-debian-jessie-installing-openjdk-8-mysql-jdbc-and-postgresql-jdbc