2012-12-13 136 views
7

我很難研究如何在debian 6.0服務器上安裝PostgreSQL的JDBC驅動程序。我提出了驅動程序.jar到以下目錄:PostgreSQL - 安裝JDBC驅動程序

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

然後教程說說使用此代碼:

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

然而,由於我是新來PostgreSQL的,我不知道我應該在哪裏放這條線,或者如果這是正確的。

我的問題是,在將jar文件移動到這個位置之後,爲了在我的postgreSQL安裝中安裝JDBC驅動程序,我實際上需要做些什麼?


編輯:這是我的設置:

服務器1: 的Tomcat + SOLR

服務器2: 的PostgreSQL與JDBC驅動程序

SOLR在服務器1查詢服務器2上的postgreSQL,通過JDBC驅動程序

+1

實現JDBC 4.0規範的驅動程序不再需要手動加載驅動程序類('Class.forName(...)')。所以,如果這是你的情況,那麼應該把司機放在你的班級路徑中,就像@Tomas在他的回答中所建議的那樣。 –

+0

如果我的應用程序(在本例中爲SOLR)位於與PostgreSQL不同的服務器上,會發生什麼情況?我應該把這個類路徑放在solr服務器上嗎? –

+0

或者是我的應用程序,而不是Postgresql? –

回答

5

最好將PostgreSQL驅動程序安裝到tomcat \ lib文件夾中。只需將驅動程序jar複製到PATH_TO_TOMCAT \ lib

將這些東西添加到系統CLASSPATH並不是一個好主意,因爲您可以在類加載器地獄中結束。這是一個如何在jar/classpath地獄中結束的例子。

  • 假設當前應用程序使用的Postgres 9.1和您安裝在系統CLASSPATH
  • 您決定運行在該框中進行對話的Postgres的較新版本的另一個應用程序的驅動程序可以說9.2版本
  • 因爲您正在使用系統類路徑應用程序2將最終使用舊驅動程序,因爲SYSTEM類路徑傾向於優先於應用程序類路徑,除非應用程序啓動腳本將CLASSPATH =「」設置爲清空系統類路徑或使用自定義類加載程序不會執行父類第一類加載。

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

3

該驅動程序必須位於您的類路徑中。您可以使用此命令

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

或者您可以將庫複製到您的項目結構中。

然後你就可以創建連接的教程說...

+0

謝謝你的回覆。這是我不明白的。我的「應用程序」是在另一臺服務器上運行的SOLR。在我的例子中,我應該使用什麼作爲我的應用程序? –

+1

@JamesWillson:如果SOLR是你的「應用程序」,那麼你應該編輯你的問題並解釋你的設置。嵌入到另一個框架/容器/服務器中的嵌入式運行涉及到與運行小型獨立應用程序完全不同的設置。 –

+0

@JamesWillson如果它使用Jetty,將該驅動程序放入Jetty的lib文件夾中... – user219882

1

在你的IDE(IDEA,Eclipse的,等等),你需要添加路徑作爲庫。

或者,如果您定義了包含該變量的CLASSPATH變量,則可以從命令行進行編譯和執行。

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

安裝所有的軟件包:

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

設置Java環境爲所有用戶,添加/編輯/ etc /環境:

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

注意:用您的JDK更改/ usr/lib/jvm/java-8-openjdk-amd64

注意:如果你者優先使用PostgreSQL-JDBC3,與/usr/share/java/postgresql.jar

更換/usr/share/java/postgresql-jdbc4.jar使用此代碼測試連接:

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()); 

     } 

    } 

} 

注意:更改數據庫,用戶和passwrod您的配置

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