2012-12-13 48 views
7

Tôi đang gặp khó khăn khi tìm hiểu cách cài đặt trình điều khiển JDBC cho PostgreSQL trên máy chủ debian 6.0 của tôi. Tôi đã chuyển tài xế .jar vào thư mục sau:PostgreSQL - Cài đặt trình điều khiển JDBC

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

Sau đó, các hướng dẫn nói về việc sử dụng mã này:

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

Tuy nhiên, kể từ khi tôi mới đến PostgreSQL Tôi không có ý tưởng nơi tôi nên được đặt dòng này, hoặc nếu điều này thậm chí là chính xác.

Câu hỏi của tôi là, không thể di chuyển tệp jar đến vị trí này, tôi thực sự cần phải làm gì để cài đặt trình điều khiển JDBC trên bản cài đặt postgreSQL của mình?


EDIT: Đây là thiết lập của tôi:

Server 1: Tomcat + Solr

Server 2: PostgreSQL với trình điều khiển JDBC

Solr trên máy chủ 1 truy vấn postgreSQL trên máy chủ 2 thông qua trình điều khiển JDBC

+1

Trình điều khiển thực hiện đặc tả JDBC 4.0 không còn yêu cầu tải thủ công lớp trình điều khiển ('Class.forName (...)'). Vì vậy, nếu đây là trường hợp của bạn, nó sẽ đủ để đưa các trình điều khiển trong đường dẫn lớp học của bạn như @ Tomas đề nghị trong câu trả lời của mình. –

+0

Điều gì xảy ra nếu ứng dụng của tôi, trong trường hợp này, SOLR, nằm trên một máy chủ khác để postgreSQL? Tôi có nên đặt đường dẫn lớp này trên máy chủ solr không? –

+0

Hoặc là ứng dụng của tôi thay vì Postgresql? –

Trả lời

5

Tốt nhất là cài đặt trình điều khiển PostgreSQL của bạn vào thư mục tomcat \ lib. Chỉ cần sao chép các trình điều khiển jar để PATH_TO_TOMCAT \ lib

Nó không phải là một ý tưởng tốt để thêm những thứ vào hệ thống CLASSPATH bởi vì bạn có thể kết thúc trong địa ngục bộ nạp lớp. Đây là một ví dụ về cách bạn kết thúc trong jar/classpath địa ngục.

  • Giả sử ứng dụng hiện tại sử dụng postgres 9.1 và bạn thiết lập trình điều khiển trên CLASSPATH hệ thống
  • Bạn quyết định để chạy một ứng dụng trên hộp đó mà nói chuyện với một phiên bản mới hơn của postgres cho phép nói rằng phiên bản 9.2
  • Vì bạn đang sử dụng ứng dụng classpath của hệ thống 2 sẽ kết thúc bằng trình điều khiển cũ vì classpath của hệ thống có xu hướng ưu tiên hơn classpath của ứng dụng trừ khi tập lệnh launcher ứng dụng đặt CLASSPATH = "" để xóa đường dẫn lớp hệ thống hoặc sử dụng trình nạp lớp tùy chỉnh không tải lớp cha-đầu tiên.

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

3

Trình điều khiển đó phải nằm trên đường dẫn lớp của bạn. Bạn có thể sử dụng lệnh này

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

hoặc bạn có thể sao chép thư viện vào cấu trúc dự án của mình.

Sau đó, bạn có thể tạo ra các kết nối như các hướng dẫn nói ...

+0

Cảm ơn bạn đã trả lời. Đó là những gì tôi không nhận được mặc dù. "Ứng dụng" của tôi là SOLR đang chạy trên một máy chủ khác. Tôi nên sử dụng ứng dụng nào trong ví dụ của mình? –

+1

@JamesWillson: Nếu SOLR là "ứng dụng" của bạn thì bạn nên chỉnh sửa câu hỏi của mình và giải thích thiết lập của bạn. Việc chạy nhúng bên trong một khung công tác/thùng chứa/máy chủ khác liên quan đến một thiết lập hoàn toàn khác với việc chạy một ứng dụng nhỏ, độc lập. –

+0

@JamesWillson Nếu nó sử dụng Jetty, hãy đưa trình điều khiển đó vào thư mục lib của Jetty ... – user219882

1

Trong IDE của bạn (Idea, Eclipse, vv), bạn cần phải thêm con đường đó như một thư viện.

Hoặc, bạn có thể biên dịch và thực thi từ dòng lệnh, nếu bạn xác định biến CLASSPATH bao gồm biến đó.

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

Cài đặt tất cả các gói:

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

Để thiết lập Java Môi trường cho tất cả người dùng, thêm/chỉnh sửa/etc/environment:

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

Note: thay đổi/usr/lib/jvm/java-8-openjdk-amd64 bằng JDK

của bạn

Note: nếu bạn ưa thích để sử dụng postgresql-jdbc3, thay thế /usr/share/java/postgresql-jdbc4.jar với /usr/share/java/postgresql.jar

Kiểm tra kết nối của bạn sử dụng mã này :

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

     } 

    } 

} 

Note: cơ sở dữ liệu thay đổi, người dùng và passwrod với cấu hình của bạn

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

Các vấn đề liên quan