我正在运行Netbeans 8.0.2。我正在学习JDBC,并想将其连接到PostgreSQL数据库。我查找了所有可能的答案,但没有答案。
我还选择了左侧菜单上的库作为PostgreSQL JDBC Driver -postgresql-9.2-1002.jdbc4.jar
显示的错误为:
发生SQL异常java.SQL.SQL异常:找不到合适的驱动程序对于Jdbc:postgresql://localhost:5432/postgres
这是代码:
try {
Class.forName("org.postgresql.Driver");
}
catch(ClassNotFoundException e) {
System.out.println("Class not found "+ e);
}
try {
Connection con = DriverManager.getConnection
("Jdbc:postgresql://localhost:5432/postgres","postgres",
"gautam");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery
("SELECT * FROM role");
System.out.println("id name");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id+" "+name);
}
}
catch(SQLException e){
System.out.println("SQL exception occured" + e);
}
我很快尝试了你的代码,第一次得到了相同的错误:
更正为:DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres","gautam");
后,它起作用了。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class NewClass {
public void initialize() {
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
System.out.println("Class not found " + e);
}
try {
Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres","gautam");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM role");
System.out.println("id name");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id + " " + name);
}
} catch (SQLException e) {
System.out.println("SQL exception occured" + e);
}
}
public static void main(String[] args) {
new NewClass().initialize();
}
}
DriverManager
询问注册到它的每个驱动程序是否可以读取url:"jdbc:postgresql://localhost:5432/postgres".
使用第一个返回true
的驱动程序。
在您的情况下,没有驱动程序返回true。
返回true或false的驱动程序的方法是acceptsURL("jdbc:postgresql://localhost:5432/postgres")
您可以使用进行测试
try {
Enumeration<Driver> drivers = DriverManager.getDrivers();
while (drivers.hasMoreElements()) {
Driver nextElement = drivers.nextElement();
JOptionPane.showMessageDialog(null, nextElement.acceptsURL("jdbc:postgresql://localhost:5432/postgres"));
JOptionPane.showMessageDialog(null, nextElement.acceptsURL("Jdbc:postgresql://localhost:5432/postgres"));
}
} catch (SQLException e) {
e.printStackTrace();
}
我使用的是NetBeans 11.1我收到的错误消息与此线程标题中的错误消息相同。我能够在Linux命令行上编译并运行Java代码。
自从两天以来,我忽略了NetBeans中的以下错误消息。我没有将此错误消息与我的问题联系起来:
跳过不存在的资源目录/home/thatsme/NetBeansProjects/myproject/src/main/resources
- 我在命令行上手动创建了这个目录
- 我用postgresql驱动程序"postgres-42.2.8.jar"将文件复制到这个目录中
从那时起,我的代码在NetBeans中运行得也很好。我知道,这是一个非常特殊的错误,但也许它也会帮助另一个错误。只是想在这里回馈一些东西。
编辑:我对ORACLE文件ojdbc8.jar也有同样的问题,我上面提到的解决方案没有帮助。但在我打开ojdbc8.jar后,它工作得很好。
$jar xf ojdbc8.jar
如果我在Netbeans/Maven之外运行我的应用程序,那么它在CLASSPATH中的打包版本也能很好地工作。