Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PgJDBC:“;找不到合适的驱动程序“;在学习教程时,为什么?_Java_Sql_Postgresql_Jdbc - Fatal编程技术网

Java PgJDBC:“;找不到合适的驱动程序“;在学习教程时,为什么?

Java PgJDBC:“;找不到合适的驱动程序“;在学习教程时,为什么?,java,sql,postgresql,jdbc,Java,Sql,Postgresql,Jdbc,我正在编写一个查询PostgreSQL数据库的Java程序。我在跟踪,但在这里遇到了麻烦: connection = DriverManager.getConnection( "jdbc:postgresql://127.0.0.1:5432/testdb", "mkyong", "123456"); 根据本文,第一个字符串是“一个数据库url,其形式为jdbc:subtocol:subname。当我连接到服务器时

我正在编写一个查询PostgreSQL数据库的Java程序。我在跟踪,但在这里遇到了麻烦:

        connection = DriverManager.getConnection(
                "jdbc:postgresql://127.0.0.1:5432/testdb", "mkyong",
                "123456");
根据本文,第一个字符串是“一个数据库url,其形式为
jdbc:subtocol:subname
。当我连接到服务器时,我键入
psql-h dataserv.abc.company.com-d app-U emp24
,并给出密码
qwe123
getConnection
的第一个参数应该是什么

我试过了

connection = DriverManager.getConnection(
                    "jdbc:postgresql://dataserv.abc.company.com",  "emp24",
                    "qwe123");
并获取运行时错误:
未找到合适的驱动程序

我已经下载了JDBC4 Postgresql驱动程序,版本9.2-1000


在我修复了我的程序,用
Class.forName(“org.postgresql.driver”);
加载驱动程序后,它识别出JDBC URL,但仍然没有连接。我现在有一个新的错误

当我运行程序时,出现了一个错误,下面是堆栈跟踪的输出:

-------- PostgreSQL JDBC Connection Testing ------------
PostgreSQL JDBC Driver Registered!
Connection Failed! Check output consoleorg.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:207)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:65)
    at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:140)
    at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29)
    at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21)
    at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31)
    at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:23)
    at org.postgresql.Driver.makeConnection(Driver.java:393)
    at org.postgresql.Driver.connect(Driver.java:267)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at DatabaseConnect.main(DatabaseConnect.java:32)
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at org.postgresql.core.PGStream.<init>(PGStream.java:60)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:101)
    ... 11 more
-----PostgreSQL JDBC连接测试------------
PostgreSQL JDBC驱动程序已注册!
连接失败!请检查输出consoleorg.postgresql.util.PSQLException:连接被拒绝。请检查主机名和端口是否正确,以及邮局主管是否接受TCP/IP连接。
位于org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:207)
位于org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:65)
位于org.postgresql.jdbc2.AbstractJdbc2Connection。(AbstractJdbc2Connection.java:140)
位于org.postgresql.jdbc3.AbstractJdbc3Connection。(AbstractJdbc3Connection.java:29)
位于org.postgresql.jdbc3g.AbstractJdbc3gConnection。(AbstractJdbc3gConnection.java:21)
位于org.postgresql.jdbc4.AbstractJdbc4Connection。(AbstractJdbc4Connection.java:31)
位于org.postgresql.jdbc4.Jdbc4Connection(Jdbc4Connection.java:23)
位于org.postgresql.Driver.makeConnection(Driver.java:393)
位于org.postgresql.Driver.connect(Driver.java:267)
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
位于DatabaseConnect.main(DatabaseConnect.java:32)
原因:java.net.ConnectException:连接超时:连接
位于java.net.DualStackPlainSocketImpl.connect0(本机方法)
位于java.net.DualStackPlainSocketImpl.socketConnect(未知源)
位于java.net.AbstractPlainSocketImpl.doConnect(未知源)
位于java.net.AbstractPlainSocketImpl.connectToAddress(未知源)
位于java.net.AbstractPlainSocketImpl.connect(未知源)
位于java.net.PlainSocketImpl.connect(未知源)
位于java.net.socksocketimpl.connect(未知源)
位于java.net.Socket.connect(未知源)
位于java.net.Socket.connect(未知源)
位于org.postgresql.core.PGStream(PGStream.java:60)
位于org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:101)
…还有11个
我将
getConnection
的URL格式化如下:

local      mydatabasename  myusername  password

jdbc:postgresql://dataserv.abc.company.com:5432/app“

很可能您没有向DriverManager注册JDBC驱动程序,因此JDBC不知道如何处理
JDBC:postgresql:
。请尝试
Class.forName(“org.postgresql.driver”);
在尝试使用
DriverManager.getConnection
之前。您链接到的示例代码(这是第一行)中显示了这一点,在的序言中进行了解释,在下面链接的PgJDBC文档中也进行了详细解释

或者,您可能键入了
jdbc:postgresql:
,因此DriverManager正在查找名为
postgresql
postgresql
或其他未注册的驱动程序

最后,您可能会吞下一个类加载异常,因此驱动程序加载失败,而您看不到它,如以下(非常糟糕)代码:

永远不要执行上述操作。要么将异常包装在未检查的运行时异常中,要么将
抛出ClasNotFoundException
添加到方法定义中


根据和,要使用驱动程序,您必须:

  • )
  • )
  • 通过传递JVM参数或使用
    Class.forName(“org.postgresql.Driver”);
    将其注册到DriverManager
这些都是手册的链接

有关
类路径的更多信息,请参阅

中讨论了JDBC
DriverManager


至于PostgreSQL的JDBCURL格式

使用JDBC,数据库由URL(统一资源)表示 定位器)。使用PostgreSQL™, 这采用以下形式之一:

jdbc:postgresql:database

jdbc:postgresql://host/database

jdbc:postgresql://host:port/database

文档接着解释了每个参数的含义以及可选的连接参数

在回答您对John Woo答案的评论时,您可以从中看到,如果您的服务器正在侦听默认的PostgreSQL端口,则不必指定端口,如果您在连接
psql
时不必指定端口,则不必指定端口


这使得您的
getConnection
参数正确,问题是您没有首先注册驱动程序。

很可能您没有向DriverManager注册JDBC驱动程序,因此JDBC不知道如何处理
JDBC:postgresql:
。请尝试
Class.forName(“org.postgresql.driver”);
在尝试使用
DriverManager.getConnection
之前。您链接到的示例代码(这是第一行)中显示了这一点,在的序言中进行了解释,在下面链接的PgJDBC文档中也进行了详细解释

或者,您可能键入了
jdbc:postgresql:
,因此DriverManager正在查找名为
postgresql
postgresql
local      mydatabasename  myusername  password