PostgreSQL - 安装 JDBC 驱动程序

11

我在我的Debian 6.0服务器上安装PostgreSQL的JDBC驱动程序遇到了困难。我已经将驱动程序的.jar文件移动到以下目录:

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

然后教程讲解如何使用这段代码:

Class.forName("org.postgresql.Driver");
然而,由于我对postgreSQL还很陌生,我不知道应该把这行代码放在哪里,或者这是否正确。我的问题是,在不将jar文件移动到此位置的情况下,我需要做什么才能在我的postgreSQL安装中安装JDBC驱动程序?
编辑:这是我的设置:
服务器1: Tomcat + SOLR
服务器2: 带有JDBC驱动程序的PostgreSQL
服务器1上的SOLR通过JDBC驱动程序查询服务器2上的postgreSQL。

1
实现JDBC 4.0规范的驱动程序不再需要手动加载驱动程序类(Class.forName(...))。因此,如果您是这种情况,按照@Tomas在他的答案中建议的方法将驱动程序放入类路径中即可。 - Edwin Dalorzo
如果我的应用程序(在这种情况下是SOLR)与postgreSQL位于不同的服务器上,会发生什么?我应该将这个类路径放在solr服务器上吗? - James Willson
我的应用是使用PostgreSQL吗? - James Willson
4个回答

7
最好将您的PostgreSQL驱动程序安装到tomcat\lib文件夹中。只需将驱动程序jar复制到PATH_TO_TOMCAT\lib。
向系统CLASSPATH添加内容不是一个好主意,因为这可能会陷入类加载器地狱。以下是一个示例,说明您如何陷入jar/类路径地狱。
- 假设当前应用程序使用postgres 9.1,并且您在系统CLASSPATH上设置了驱动程序。 - 您决定在该框上运行另一个应用程序,该应用程序与较新版本的postgres(例如9.2)通讯。 - 因为您正在使用系统类路径,所以应用程序2将使用旧驱动程序,除非应用程序启动器脚本将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

或者您可以将库复制到您的项目结构中。

然后,您可以按照教程所说创建连接...


谢谢您的回复。不过我还是不太明白。我的“应用程序”是在另一台服务器上运行的 SOLR。在您的示例中,我应该使用什么作为我的应用程序呢? - James Willson
1
@JamesWillson:如果SOLR是你的“应用程序”,那么你应该编辑你的问题并解释你的设置。在另一个框架/容器/服务器内嵌运行涉及到完全不同的设置,与运行小型独立应用程序不同。 - A.H.
谢谢你们的评论。我在这方面确实有些力不从心,所以很抱歉没有澄清一切。我已经在原帖中添加了更多信息。请问这是否能带来任何明确性? - James Willson
1
@JamesWillson 我的理解是,服务器2不需要驱动程序。数据库机器完全独立,并且仅提供接口,您可以连接上去。所以将JDBC驱动程序放在Tomcat的lib目录中,问题就应该解决了... - user219882

2

安装所有软件包:

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

为所有用户设置Java环境,请添加/编辑/etc/environment:

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

注意: 将 /usr/lib/jvm/java-8-openjdk-amd64 替换为您的 JDK

注意: 如果您更喜欢使用 postgresql-jdbc3,请将 /usr/share/java/postgresql-jdbc4.jar 替换为 /usr/share/java/postgresql.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());

      }

   }

}

注意:将数据库、用户和密码更改为您的配置。
请访问以下链接以了解有关在Debian Jessie安装OpenJDK 8,MySQL JDBC和PostgreSQL JDBC的详细信息:http://www.garasiku.web.id/web/joomla/index.php/java/112-debian-jessie-installing-openjdk-8-mysql-jdbc-and-postgresql-jdbc

1

在您的IDE (Idea,Eclipse等) 中,您需要将该路径作为库添加。

或者,如果您定义了包含它的CLASSPATH变量,则可以从命令行编译和执行。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接