我写了下面的java程序
import java.io.*; import java.util.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.logging.Level; import java.util.*; public class Sample { public static void main (String[] args) throws IOException { int CountComputers; FileInputStream fstream = new FileInputStream( "/export/hadoop-1.0.1/bin/countcomputers.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); String result=br.readLine(); CountComputers=Integer.parseInt(result); input.close(); fstream.close(); Connection con = null; Statement st = null; ResultSet rs = null; String url = "jdbc:postgresql://192.168.1.8:5432/NexentaSearch"; String user = "postgres"; String password = "valter89"; ArrayList<String> paths = new ArrayList<String>(); try { con = DriverManager.getConnection(url, user, password); st = con.createStatement(); rs = st.executeQuery("select path from tasks order by id"); while (rs.next()) { paths.add(rs.getString(1)); }; PrintWriter zzz = null; try { zzz = new PrintWriter(new FileOutputStream("/export/hadoop-1.0.1/bin/readwaysfromdatabase.txt")); } catch(FileNotFoundException e) { System.out.println("Error"); System.exit(0); } for (int i=0; i<paths.size(); i++) { zzz.println("paths[i]=" + paths.get(i) + "\n"); } zzz.close(); } catch (SQLException e) { System.out.println("Connection Failed! Check output console"); e.printStackTrace(); } } }
我编译了这个程序并创建了jar文件
./javac -classpath /folder/postgresql-8.4-703.jdbc3.jar -d /Samplejavaprogram/classes /Samplejavaprogram/src/Sample.java ./jar -cvf /Samplejavaprogram/Sample.jar -C /Samplejavaprogram/classes/ .
Jar具有以下清单文件
Manifest-Version: 1.0 Created-By: 1.7.0_06 (Oracle Corporation) Main-Class: Sample Class-Path: /folder/postgresql-8.4-703.jdbc3.jar
还包含文件/folder/postgresql-8.4-703.jdbc3.jar。我通过命令启动了Sample.jar
./java -jar -Djava.library.path=/opt/jdk1.7.0_06/lib /Samplejavaprogram/Sample.jar
结果,我收到以下消息
Connection Failed! Check output console java.sql.SQLException: No suitable driver found for jdbc:postgresql://192.168.1.8:5432/NexentaSearch at java.sql.DriverManager.getConnection(DriverManager.java:604) at java.sql.DriverManager.getConnection(DriverManager.java:221) at org.myorg.Sample.main(Sample.java:33)
我从地址为192.168.1.10的主机启动了文件,在主机192.168.1.8上正常完成了文件。帮助消除错误。
您正在使用JDBC 3驱动程序。JDBC 4驱动程序是由加载的,DriverManager而JDBC 3驱动程序不是。因此,您需要调用
DriverManager
Class.forName("org.postgresql.Driver");
一次在您的应用程序中(调用之前DriverManager#getConnection)。
DriverManager#getConnection
或者,您可以从此处使用JDBC 4 PostgreSQL驱动程序,而无需上述方法调用。