我有简单的课程。然后我尝试编译并运行它,我看到ClassNotFoundException。
import java.sql.*;
public class DBProcessor{
private static String serverAdres = "127.0.0.1:5432";
private static String DBname = "dota";
private static String clientName = "postgres";
private static String password = "master";
private static Connection connection;
public static void connect() {
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
System.err.println("Where is your PostgreSQL JDBC Driver? "
+ "Include in your library path!");
e.printStackTrace();
}
try {
connection = DriverManager.getConnection("jdbc:postgresql://" + serverAdres + "/" + DBname, clientName, password);
} catch (SQLException e) {
System.err.println("Connection Failed! Check output console");
e.printStackTrace();
}
if (connection == null) {
System.err.println("Failed to make connection!");
}
}
public static void main(String[] args){
DBProcessor db = new DBProcessor();
db.connect();
}
}
我使用的是Windows cmd:
C:\rmi2>javac -classpath postgresql.jar DBProcessor.java
C:\rmi2>java DBProcessor
Where is your PostgreSQL JDBC Driver? Include in your library path!
java.lang.ClassNotFoundException: org.postgresql.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at DBProcessor.connect(DBProcessor.java:12)
at DBProcessor.main(DBProcessor.java:34)
Connection Failed! Check output console
java.sql.SQLException: No suitable driver found for jdbc:postgresql://127.0.0.1:
5432/dota
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at DBProcessor.connect(DBProcessor.java:20)
at DBProcessor.main(DBProcessor.java:34)
Failed to make connection!
我做错了什么? 所以,这是postgrsql库https://www.dropbox.com/s/idx5l0kub5rn1b8/postgresql.jar?dl=0
答案 0 :(得分:5)
在命令行上,这个
java DBProcessor
应该是
java -cp .;postgresql.jar DBProcessor
并且,因为它包含java.sql.Driver
,当您使用它时,您可以删除
// try {
// Class.forName("org.postgresql.Driver");
// } catch (ClassNotFoundException e) {
// System.err.println("Where is your PostgreSQL JDBC Driver? "
// + "Include in your library path!");
// e.printStackTrace();
// }
根据DriverManager
Javadoc,
DriverManager
方法getConnection
和getDrivers
已得到增强,可支持Java Standard Edition Service Provider机制。 JDBC 4.0驱动程序必须包含文件META-INF/services/java.sql.Driver
。此文件包含java.sql.Driver
的JDBC驱动程序实现的名称。例如,要加载my.sql.Driver
类,META-INF/services/java.sql.Driver
文件将包含条目:my.sql.Driver
应用程序不再需要使用
Class.forName()
明确加载JDBC驱动程序。当前使用Class.forName()
加载JDBC驱动程序的现有程序将继续工作而无需修改。
答案 1 :(得分:0)
您需要将驱动程序链接到IDE。 如果您正在使用Netbeans,请右键单击Libraries,添加jar /文件夹,然后浏览到驱动程序。
答案 2 :(得分:0)
如果Java运行时环境无法访问postgresql.jar文件 将获得'java.lang.ClassNotFoundException:org.postgresql.Driver'异常。
使您可以访问postgresql jdbc驱动程序的最简单方法 应用程序将其安装为Java扩展。你唯一需要做的事情 是将postgresql.jar文件中的cp,mv或ln放入Java扩展目录。那里 如果这样做,则无需设置CLASSPATH。 Java扩展目录是$ JAVA_HOME / jre / lib / ext(我系统上的$ JAVA_HOME) 是/usr/java/jdk1.3)或Windows C:\ Program Files \ Java \ jdk1.8.0_25 \ jre \ lib \ ext
这让生活变得简单;我不必在我的环境中再次设置CLASSPATH!