2011-01-18 9 views
3

サーバ上のMySQLデータベースに簡単なJDBC接続を設定しています。私はMySQLが提供するConnector-Jを使用しています。彼らのドキュメントによると、mysql-connector-java-5.0.8-bin.jarが置かれているディレクトリを指すようにCLASSPATH変数を作成すると仮定します。私はexport set CLASSPATH=/path/mysql-connector-java-5.0.8-bin.jar:$CLASSPATHを使用しました。私がecho $CLASSPATHと入力して、それが存在するかどうかを確認すると、すべてうまく見えます。しかし、新しい端末を開いてecho $CLASSPATHと入力すると、それはもはや存在しません。私が設定したCLASSPATH変数を保存していないため、これが私のJavaサーバーがJDBCに接続しない主な理由だと思います。JDBC CLASSPATHが動作しない

最初にJDBCを設定する方法の提案や修正がありましたか?

答えて

2

CLASSPATH環境変数は忘れてください。それは大きな冗談です。これは、低レベルのjava com.example.Fooコマンド以外はほとんどすべて無視されます。 -jar引数を追加すると無視されます。 -cpまたは-classpath引数を追加すると無視されます。 IDEやWeb /アプリケーションサーバーでは無視されます。その環境変数は、初心者の便宜のために意図されていました。しかし、それを超えて、それは役に立たない。

JARファイルは、問題のJavaアプリケーションのランタイムクラスパスの既存の/デフォルトパスのいずれかに配置する必要があります。または、少なくともJARファイルへのパスを追加する必要があります問題のJavaアプリケーションの実行時クラスパスに渡します。

サーバーについて話しているので、CLASSPATHという環境変数が機能しないことを考慮すると、実際にはApache TomcatなどのWebサーバー/アプリケーションサーバーだと仮定します。もしそれが本当であれば、Tomcat/libフォルダにJARファイルをドロップするか(高速接続プールのためにコンテナDataSourceアプローチを使用する場合)、またはwebappのWEB-INF/libフォルダにロードする必要があります(貧しい人のClass#forName()アプローチドライバ)。

実際にJARとして実行されるJavaアプリケーションの場合は、問題のJARのファイルMANIFEST.MFにクラスパスを指定する必要があります。しかし、それもそうでなく、緩い.classファイルの場合は、-cpまたは-classpath引数のクラスパスをjavaコマンドに指定する必要があります。実行時に何度も繰り返し入力しないようにするには、コマンドで.shファイルを作成します。

1

やろう:

Class.forName("com.mysql.jdbc.Driver"); 

ます。また、MySQLのJDBCドライバの最新バージョンを取得したい場合がありますあなたの接続

を取得する前に。 5.0.8はかなり古いです。

JDBC Basicsをご覧ください。いくつかのヒントがあります。

このtutorialもお役に立ちます。

+0

...私はあなたにいくつかの背景を与えてみましょう。私は、古いサーバーがハードドライブの故障で死んでしまったので、実際に新しいサーバーを開始しました。私の古いサーバはJDBCを走らせていただけでDebian Lennyに見つかりました。しかし、この新しいサーバはAtomプロセッサでDebian Squeezeを実行しています。とにかく、私はこのマシンでJDBCをセットアップするのにもっと苦労していますが、私はJavaサーバーが機能していることを知っていますので、Javaプログラムの問題ではありません。 – Brian

+0

取得したスタックトレースやプロセスの開始に使用するコマンドラインなどの情報をいくつか投稿できますか? java -versionの出力も便利です。 – Tony

+0

確かに、私はjava -versionに従ってJava 1.5.0を使用しています。ここでは、サーバーがJDBCに接続できないときに得られる正確なスタックトレースを示します。 – Brian

0

あなたはLinuxボックスで作業しているようです。端末がloginシェルを起動していることを確認してください。たとえば、gnome-terminalアプリケーション(おそらくあなたが開発用にubuntuまたはfedoraボックスを使用している場合は、プロファイルの設定>タイトルとコマンドメニューの「ログインシェルとしてコマンドを実行する」の下にチェックボックスがあります。それを確認し、このコードを最後の〜/ .bash_profileファイルにも入れてください。

export CLASSPATH=/path/mysql-connector-java-5.0.8-bin.jar:$CLASSPATH 

しかし、私はこれをやって、あなたのアプリケーションのための簡単な起動スクリプトを実行することに反対します。これと似たようなもの:

#!/bin/bash 

Set CLASSPATH=CLASSPATH=/path/mysql-connector-java-5.0.8-bin.jar:$CLASSPATH 

java -cp "$CLASSPATH" <your.main.application.Class> 

実行可能にしてアプリケーションを起動するために使用します。

+0

@Baluscは基本的に同じものなので、何を確認してください。アプリケーションがクラスパス内のjdbcドライバで始まっていることを確認してください。 –

0

私はこれが古いスレッドだと知っていますが、それは誰かを助けるかもしれません。

私は、JDBCドライバのsqlite-JDBC-3.7.2を使用し、適切なCLASSPATH

でWindows 7上でSQLite3のへの接続に成功しました。

まず、私はディレクトリCの下にドライバをコピーしてみました:\プログラムファイル\のJava \ jre7の\ libにして、CLASSPATH変数を設定し、それがラインを認識するために失敗しました:

Class.forName("org.sqlite.JDBC"); 

私はのことを考えますWindowsバグのために、 "Program Files"のようなフォルダ名にスペースが含まれています。

は、だから私はCの下のJARファイルをコピー:\のjbmorlaをとにCLASSPATHを設定します。 達人がソリューションをプロジェクトのために、これは

0

を助け

.;c:\jbmorla\sqlite-jdbc-3.7.2.jar 

希望。 pom.xmlファイルを直接変更することができます。 はのpom.xmlプロジェクトファイルへのmysql-コネクタの依存関係を追加します。正直に言うと、実は

<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <version>5.1.40</version> 
</dependency> 
関連する問題