質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

1回答

16505閲覧

Eclipsの開発でJDBCの配置場所はプロジェクトごとに変えなければいけないの?

RyoM

総合スコア90

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2016/08/02 06:52

編集2016/08/02 12:06

いつもお世話になっております。

ようやくデータベースを使用し、サーブレットで動かすという段階を学び始めたところなんですが、
その時に一つ疑問が出てきましたので、質問させていただきたいと思います。
それは、**JDBCの配置場所は動的プロジェクトを作るたびに毎回WEB-INの下に配置し、
ビルドパスしなければいけないのか?**ということです。
私の勉強不足のせいかもしれませんが、毎回プロジェクトを作るたびにJDBCを配置しています。
作るプロジェクトによって扱うデータベースが異なる等、何かしらの変更点がある場合はわからないのですが、今学習している現状において、一種類のデータベースしか使っていないので、毎回ビルドパスするよりもどこか共通の部分にJDBCを配置し、毎回の少しの手間を失くせないかと思った次第であります。
もし、そういった方法があればご教授のほどよろしくお願いいたします。

java

1import java.sql.DriverManager; 2 3import com.mysql.jdbc.Connection; 4 5public class MySql 6{ 7 public static Connection getConnection() 8 { 9 try 10 { 11 Class.forName("com.mysql.jdbc.Driver"); 12 Connection con = (Connection) DriverManager.getConnection( 13 "jdbc:mysql://localhost:3306/learning", "root", ""); 14 return con; 15 } 16 catch(Exception e) 17 { 18 throw new IllegalStateException(e); 19 } 20 } 21}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matobaa

2016/08/02 11:59

Driverインスタンスってどうやって入手してますか? [1] サーブレットの中で Class.forName(クラス名).newInstance() [2] DIコンテナで作って注入 [3] Servletサーバの設定ファイルに書いてweb.xmlで紐付け [4] Java EEサーバの設定ファイルに書いてJNDIで取得 [5] その他
RyoM

2016/08/02 12:12

1のClass.forName(クラス名).newInstance()ドライバのロードはしているはずです。
guest

回答1

0

サーブレット内で Class.forName().newInstance() しているのなら、毎回ビルドパスに追加するのが正しいやり方です。Javaランタイム環境やTomcatランタイム環境にライブラリを追加してしまう方法もありますが、少々乱暴なので紹介しません。


Servlet仕様やJavaEE仕様では、コンテナ(Tomcat, Glassfish, JBossなど)と JavaEEアプリケーション、Webアプリケーションそれぞれに分担があって、その分担ごとにライブラリを置く場所が決まります。

RyoMさんはWebアプリケーションを作成していますが、サーブレットが自力でDB接続を手に入れているので、ライブラリもサーブレットのすぐそばに置くのが正しい。
Eclipseでは、WebContent/WEB-INF/lib にライブラリを格納するか、ビルドパスに追加したうえで、Deployment Assembly 設定画面で、追加したライブラリを指定します。こうすることで、warファイルを作成したときライブラリが同梱され、warファイル単独で別環境にデプロイできるようになります。

一歩進め、DB接続をコンテナ側に任せ、WebアプリケーションはコンテナからDB接続を借り受けて接続する、といった構成にする場合、コンテナのクラスパスにライブラリを追加して、コンテナの設定にDB接続を追加します。サーブレットからは、借り受けるDB接続を web.xml に記載して利用します。
Eclipse WTPで Tomcat を使っている状況なら、サーバーの実行時設定のクラスパスにライブラリを追加するか catalina/lib にライブラリを格納し、Serversプロジェクトの中にある Tomcat の context.xml に、JNDI DataSource を設定し、Webアプリケーションからは InitialContext から DataSource を取り出して使います。
http://tomcat.apache.org/tomcat-8.0-doc/jndi-datasource-examples-howto.html
http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html

Java EE 6仕様のCDIを使うのであれば、Webアプリケーションはコンテナから DataSource を与えてもらって使うという、とてもすっきりしたやり方になります。たしかTomcatだけではできない(別途CDIを導入する必要がある)ので、JBoss AS や Glassfish を使うようになったら検討してみてください。場合によってはTomcatをがんばって使い続けるよりも話が早いかもしれません。
http://docs.oracle.com/javaee/6/tutorial/doc/bncjk.html

追記: マイナス評価されていますね……もし間違っている点がありましたらご指摘ください。指摘が無いと、なぜマイナス評価なのだか、質問者や読み手にとっても回答が妥当なのか誤っているのかさえ判断がつかないので困ってしまうので、コメントを投稿してください。あるいはこの回答を超える回答をしてもらってもよいかと。

投稿2016/08/02 15:20

編集2016/08/03 11:35
matobaa

総合スコア2493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RyoM

2016/08/03 17:50

僕としては非常に丁寧に回答していただいて有り難かったんですが、、、 ただ、matobaa様の仰ってくださっているコンテナ部分の学習が全く出来ていないので、もう少し勉強してから、もう一度拝見させていただいて理解してみようと思います。
argius

2016/08/21 06:14

to matobaaさん コメントのつかないマイナス評価は、 明らかにアウトな回答ならまだしも 理由がはっきりしないものは気にしても無駄だと思います。 経験上。 自分が理解できなかったからマイナス、という人もいるかもしれないし、 長すぎるから3行で、という意味かも知れないし、 某アプリのレビューみたいに、英語で読めないので評価1です!みたいなのもあるかも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問