単純なJDBCコードがあります。
static Connection c;
static PreparedStatement ps;
public static void initializeDB() throws IOException, ClassNotFoundException, SQLException {
Properties prop = new Properties();
prop.load(new FileInputStream("dbconn.properties"));
String connurl = prop.getProperty("connurl");
String driver = prop.getProperty("driver");
String username = prop.getProperty("username");
String password = prop.getProperty("password");
System.out.println(driver); //prints "com.mysql.jdbc.Driver"
Class.forName(driver);
c = DriverManager.getConnection(connurl, username, password);
しかし、私は得ています
java.lang.ClassNotFoundException:java.net.URLClassLoader $ 1.run(URLClassLoader.java:202)の "com.mysql.jdbc.Driver"、java.net.URLClassLoaderのjava.security.AccessController.doPrivileged(ネイティブメソッド)。 findClass(URLClassLoader.java:190)at java.lang.ClassLoader.loadClass(ClassLoader.java:307)at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)at java.lang.ClassLoader.loadClass(ClassLoader .java:248)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:169)at testapp.DBUpdater.initializeDB(Testapp.java:71)attestapp.Testapp。 main(Testapp.java:38)
printステートメントからわかるように、プロパティ値は完全にアクセスされます。変数を文字列値に直接置き換えると、正常に機能します。
いつ使うべきか
prop.load(new FileInputStream(System.getProperty( "dbconn.properties")));
mysql-connector jarファイルからDriverクラスを表示したとき、静的コードが表示されることを期待していましたが、何も見つかりませんでした。