0

Apache Derby のインストールに問題がないことを証明するために、テスト プログラムを実行してみました。
このチュートリアルに従ってインストール Ubuntu に Apache Derby をインストール

プログラムを実行するには、端末から次のように入力する必要があります。

java -classpath driver_class_path:. TestDB database.properties

からのコードTestDB class:

public class TestDB 
{
   public static void main(String[] args) throws Exception
   {   
      if (args.length == 0)
      {   
         System.out.println(
               "Usage: java -classpath driver_class_path" 
               + File.pathSeparator 
               + ". TestDB database.properties");
         return;
      }
      else 
         SimpleDataSource.init(args[0]);

      Connection conn = SimpleDataSource.getConnection();
      try
      {
         Statement stat = conn.createStatement();

         stat.execute("CREATE TABLE Test (Name CHAR(20))");
         stat.execute("INSERT INTO Test VALUES ('Romeo')");

         ResultSet result = stat.executeQuery("SELECT * FROM Test");
         result.next();
         System.out.println(result.getString("Name"));

         stat.execute("DROP TABLE Test");
      }
      finally
      {
         conn.close();
      }
   }
}

からSimpleDataSource class:

public class SimpleDataSource
{
   private static String url;
   private static String username;
   private static String password;

   /**
      Initializes the data source.
      @param fileName the name of the property file that 
      contains the database driver, URL, username, and password
   */
   public static void init(String fileName)
         throws IOException, ClassNotFoundException
   {  
      Properties props = new Properties();
      FileInputStream in = new FileInputStream(fileName);
      props.load(in);

      String driver = props.getProperty("jdbc.driver");
      url = props.getProperty("jdbc.url");
      username = props.getProperty("jdbc.username");
      if (username == null) username = "";
      password = props.getProperty("jdbc.password");
      if (password == null) password = "";
      if (driver != null)
         Class.forName(driver);
   }

   /**
      Gets a connection to the database.
      @return the database connection
   */
   public static Connection getConnection() throws SQLException
   {
      return DriverManager.getConnection(url, username, password);
   }
}

の内容database.properties:

jdbc:oracle:thin:@larry.mathcs.sjsu.edu:1521:InvoiceDB
/usr/share/javadb

データベースのユーザー名データベースのパスワードの空白行。

実行後の出力:

nazar_art@nazar-desctop:~/Desktop/Big JAVA/bj4_code/ch22/test$ java -classpath /usr/share/javadb:. TestDB database.properties
Exception in thread "main" java.sql.SQLException: The url cannot be null
    at java.sql.DriverManager.getConnection(DriverManager.java:556)
    at java.sql.DriverManager.getConnection(DriverManager.java:215)
    at SimpleDataSource.getConnection(SimpleDataSource.java:45)
    at TestDB.main(TestDB.java:26)

アップデート:

ダービー組み込みドライバーを使用しようとしました。に変更database.propertiesしました

jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
jdbc.url=jdbc:derby:InvoiceDB;create=true;
user=me;
password=mine 

しかし、実行した後、次の出力がありました:

nazar_art@nazar-desctop:~/Desktop/Big JAVA/bj4_code/ch22/test$ java -classpath /usr/share/javadb:. TestDB database.properties
Exception in thread "main" java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at SimpleDataSource.init(SimpleDataSource.java:36)
    at TestDB.main(TestDB.java:24)

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

3

プロパティ ファイルの形式は次のとおりです。

key1=value1
key2=value2

キーを忘れたため、すべてのprops.getProperty()呼び出しで null が返されます。

次に、データベースの URL が derby データベースと一致しません。Oracle データベースに似ています。そして、どのドライバークラスを使用していますか?

多分これはうまくいくでしょう

jdbc.driver=org.apache.derby.jdbc.ClientDriver
jdbc.url=jdbc:derby://localhost:1527/InvoiceDB;create=true;user=me;password=mine

事前に Derby サーバーを開始していることを確認してください。

埋め込みドライバーを使用する場合、ドライバー クラスはorg.apache.derby.jdbc.EmbeddedDriverで、URL は になりますjdbc:derby:InvoiceDB;create=true;user=me;password=mine

于 2013-09-01T12:38:56.370 に答える