4

Java Web アプリケーションの context.xml ファイルで SQLite データベース ファイルへの相対パスを使用することは可能ですか?

現在、私は持っています:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/mywebapp">
    <Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
        maxActive="100" maxIdle="30" maxWait="10000"
        username="myusername" password="mypassword" driverClassName="org.sqlite.JDBC"
        url="jdbc:sqlite://Users/me/NetBeansProjects/MyApp/web/my.db"/>
</Context>

ご覧のとおり、Resource タグの url 属性は現在、my.db への絶対パスを指定しています。ただし、私はクラス プロジェクトとして小さな開発者チームでこのプロジェクトに取り組んでいます。Subversion を通じてコードを共有しており、現在、プロジェクトを更新するたびに、上記のパスをコンピューターの正しいパスに手動で置き換える必要があります。

前もって感謝します。


更新:相対パスは context.xml ファイルに対してではなく、CATALINA_HOME に対して相対的であるようです。残念ながら、そのディレクトリ (Tomcat がある場所) は、別のユーザーのホーム フォルダー (1) にあり、読み取りアクセスしかありません。

(1) /home/myprof/Tomcat/bin/
(2) /home/me/NetBeansProjects/MyApp/web/my.db

上記のように、このプロジェクトは svn リポジトリを介して複数のコンピューターで実行され、プロジェクト ファイルが含まれるディレクトリ (2) が変更されるため、/me を相対パスに含めることはできません。ただし、すべてのアカウントが共有仮想ネットワーク上にあるため、CATALINA_HOME (1) は変更されません。


また、サーブレット内の上記の context.xml ファイルからデータベース ファイル my.db へのパスを取得するにはどうすればよいですか?

4

6 に答える 6

9

SQLite で JDBC を使用する次の例を見つけました。

  • メモリ アクセスの場合:

     jdbc:sqlite::memory:
    
  • 相対パスの場合:

     jdbc:sqlite:relative/path.db
    
  • 絶対パスの場合:

     jdbc:sqlite:/absolute/path.db
    
于 2009-04-24T09:16:55.700 に答える
1

別のアプローチとして:使用しようとしましたjdbc:sqlite:~/myapp.dbか?これ、そのアプリケーションを実行しているすべてのユーザーのコンピューター上の書き込み可能な場所である必要があります。(私は、読み取り専用のホーム ディレクトリという悪を見てきましたが。)

~データベース URL でSQLite がサポートされているかどうかは正確にはわかりません。私はH2がそうであることを知っており、組み込み Java DB として推奨するしかありません。データベースを変更したくない場合は、Tomcat の構成ファイルで、${user.home}. (いくつかの予備的なグーグル検索では、メーリング リストの結果が表示され、少なくともserver.xml.

あなたが達成しようとしていることはまだ正確にはわかりません.Tomcatインスタンスを実行しているのはあなたですか、それともシステムアカウントで実行されている共有Tomcatインスタンスですか?

また、データベースを配置するために、ネットワーク上に誰でも書き込み可能な別の場所を設定することもできます。おそらくその下のどこか、またはある人のホーム ディレクトリに/var/設定されているフォルダだけです。ug=rwx

于 2009-04-30T15:16:35.753 に答える
0

私はここで私の質問に対する答えを見つけました。解決策は、context.xmlファイルからデータベースURLを解析しようとするのではなく、リソースを取得することです。

于 2010-02-14T21:17:09.130 に答える
0

Spring と jdbc.properties で同じ問題が発生しました // を削除して修正し、相対パスを記述します

これを試して

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/mywebapp">
    <Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
        maxActive="100" maxIdle="30" maxWait="10000"
        username="myusername" password="mypassword" driverClassName="org.sqlite.JDBC"
        url="jdbc:sqlite:web/my.db"/>
</Context>
于 2009-09-01T11:02:38.130 に答える