PostgreSQLデータベースに接続して、特定の命名パターンでデータベースがあるかどうかを調べる非常に簡単なJavaプログラムがあります。私がそれらを見つけると、私はそれらをJava JDBCコードを通して削除しようとしています。 Javaコードは、手動で実行するとうまく動作しますが、達成しようとしているのは、このJava呼び出しをバッチファイルで自動化することです。バッチファイルからJavaプログラムを呼び出すときに助けが必要
誰もがこれにどのような光を投げることができますか?私はこれのための解決策を見つけるのに苦労していることが、不満を募っていました。
私のJavaコード:
public class CreateBatchToCleanNamedDBs {
public static void main(String[] args) {
Connection connection = null;
BufferedReader input = null;
try {
String line;
RandomAccessFile batchFile = new RandomAccessFile("C:/batch.sql", "rw");
Class.forName("org.postgresql.Driver");
connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "Welcome12!");
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("select datname from pg_database where datname like 'sample_db%';");
while (rs.next()) {
batchFile.writeBytes("DROP DATABASE " + rs.getString("datname") + ";\n");
System.out.println(rs.getString("datname"));
}
Process batchProcess = Runtime.getRuntime().exec("C:/Program Files/PostgreSQL/9.5/bin/psql -h localhost -U postgres -f C:/batch.sql");
input = new BufferedReader(new InputStreamReader(batchProcess.getInputStream()));
if(batchFile.length()!= 0) {
while ((line = input.readLine()) != null) {
System.out.println(line);
}
}
batchFile.close();
} catch(Exception exception) {
System.out.println("Exception caught: " + exception);
exception.printStackTrace();
} finally {
try {
connection.close();
} catch (SQLException sqlexception) {
sqlexception.printStackTrace();
}
}
}
}
私のバッチファイルのスクリプト:
@echo off
setlocal
if not defined JAVA_HOME goto :NoJavaFound
"%JAVA_HOME%\bin\java.exe" -jar "%~dp0\deletedb.jar;%~dp0\postgresql-9.4.1207.jar;" connect.postgresql.CreateBatchToCleanNamedDBs
goto :end
:NoJavaFound
echo JAVA_HOME environment variable is not set.
goto :end
:end
endlocal
私はjarファイル(私のJavaコード、上に示した)と、デスクトップ上のバッチスクリプトファイル(両方を持っています同じフォルダ)を実行しようとしていますが、NullPointerException
があります。私のJavaコードにはPostgreSQL jdbcドライバがありません。私はそれを複数の方法でパラメータとして追加しようとしましたが、何も動作しません。
エラーの詳細:
C:\Users\pavan>C:\Users\pbonda\Desktop\deletedb.bat
Exception caught: java.lang.ClassNotFoundException: org.postgresql.Driver
java.lang.ClassNotFoundException: org.postgresql.Driver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at connect.postgresql.CreateBatchToCleanNamedDBs.main(CreateBatchToCleanNamedDBs.java:20)
Exception in thread "main" java.lang.NullPointerException
at connect.postgresql.CreateBatchToCleanNamedDBs.main(CreateBatchToCleanNamedDBs.java:45)
感謝を参照してください、私は今、次のエラーを取得する: 'エラー:jarファイルをCにアクセスすることができません:\ Users \ユーザーpavan \デスクトップ\\ deletedb.jar;' –
@BPavanKumarは - してみてください今.. – npocmaka
ありがとう@npocmaka、それは働いた! :) –