JDBCでDBアクセスする際のユーザーID、パスワード等はハードコードして良い?

このQ&Aのポイント
  • JDBCを使用してDBにアクセスする際、ユーザーIDやパスワードをハードコードしても問題ありませんか?
  • JDBCを使用したサンプルコードで、ユーザーIDやパスワードがハードコードされていますが、実際の業務プログラムでも同じようにしても良いのでしょうか?
  • ホスト名やポート名、データベース名に関しても、プログラムに直接書いても問題ないのか、設定ファイルなど別の方法があるのか知りたいです。
回答を見る
  • ベストアンサー

JDBCでDBアクセスする際のユーザーID、パスワード等はハードコードして良い?

ServletからJDBCによってデータベースにアクセスしようと思っております。 例えば次のようなサンプルが見つかりました。 (http://www.atmarkit.co.jp/fjava/rensai/jdbc02/jdbc02.html) class JavaDataAccess01 { public static void main (String args[]) throws SQLException, ClassNotFoundException { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger");   ・・・省略・・・ } } サンプルにならって、自分のServletでも同様にやってみたところ、無事にデータベースにアクセスすることができました。 ただ、上記のユーザー名やパスワードをハードコードしている個所が気になりました。 DBの経験がないのでよく分からないのですが、実際の業務プログラムでもハードコードして良いものなのでしょうか。 また、ホスト名、ポート名、データベース名(上記のORCL)についても、プログラムに直接書いてしまって問題ないものなのでしょうか。 それとも、何らかの設定ファイルのような形で登録しておいたりするのでしょうか。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

もし、保守性を大切にするのであれば、ハードコーディングはせずに、 プロパティファイルに出すか、xmlファイルにするか、 もしくは、JNDIにすると良いでしょう。 サンプルプログラムは、たぶん、簡略化のためにハードコーディングしていると思われます。

donkypong
質問者

お礼

JNDIというしくみがあるのですね。 こちらで、JNDIによってデータベース接続情報を管理する方法がみつかりました。 http://www.atmarkit.co.jp/fjava/javatips/004container003.html ありがとうございました。

関連するQ&A

  • DBサーバ上でjdbcによるアクセス方法について

    Oracle JDBC Driverのロードを以下のように行おうとしました。 import java.sql.*; class JavaDataAccess01 { public static void main (String args[]) throws SQLException, ClassNotFoundException { // Oracle JDBC Driverのロード Class.forName("oracle.jdbc.driver.OracleDriver"); // Oracle10gに接続 Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:ORCL", "test", "test"); // ステートメントを作成 Statement stmt = conn.createStatement(); // 問合せの実行 ResultSet rset = stmt.executeQuery("select brand_id,value from brand"); // 問合せ結果の表示 while ( rset.next() ) { // 列番号による指定 System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } // 結果セットをクローズ rset.close(); // ステートメントをクローズ stmt.close(); // 接続をクローズ conn.close(); } } コンパイル後実行すると以下のように例外がでます。 Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.driver. OracleDriver at java.net.URLClassLoader$1.run(URLClassLoader.java:199) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:141) at JavaDataAccess01.main(JavaDataAccess01.java:11) ちなみにコンパイルして作成したクラスファイルはJavaDataAccess01です。使用しているDBはoracle10gです。環境設定もCLASSPATHにD:\oracle\product\10.2.0\db_1\jdbc\lib\classes12.zipを追加しているのですがどうにもうまくいきません。どなたか解決方法がわかる方、ご教授お願いします。

  • ServletでJDBCを使う時

    servletでJDBCを使ってデータベースに接続しようと思っていますが、 servletのdoGetの中で、 Class.forName("com.mysql.jdbc.Driver"); と書くとClassNotFoundExceptionエラーになります。 public static Connection getConnection() などのクラスを作って、その中で Class.forName("com.mysql.jdbc.Driver"); と書くとエラーにはならないのですが、doGetの中では宣言できないのでしょうか?自分が何か勘違いしていたら申し訳ございません。 ご助言お願いいたします。

    • ベストアンサー
    • Java
  • JDBCでaccessから取得したデータをjTableに表示させたい。

    JDBCでaccessのデータベースから取得したデータをjTableに表示させたいのですが どのようにしたらセルのデータやタイトルを入力させることができますか? またデータベースを操作したらその結果を表示させたいと考えています。どのようにすれば実現できるでしょうか? accessのデータベースには以下のように接続していました。 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String str = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=hello.mdb"; Connection con = DriverManager.getConnection(str, "", ""); 開発環境はNetBeansを使用しています。

  • ORACLEに接続できない

    お世話になります。 JAVAでoracleに接続しようとしているのですが cmdからの接続はできたのですが tomcatでの接続が行えません。 oracle 9i Tomcat 5.5 エラー内容は java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver です。 接続するコードは以下のようです。 String drv = "oracle.jdbc.OracleDriver"; String dsn = "jdbc:oracle:thin:@localhost:1521:SID"; その他補足も致しますので、 ご教授宜しくお願い致します。 また、上記コードを使用した別のコードで行ったところ CMDでの接続はできましたので classPathは通っているとおもうのですが…

    • ベストアンサー
    • Java
  • Javaアプリケーションで動くJDBCがサーブレットで動かない

    Javaアプリケーションでは動いていたJDBCのソースをサーブレットの中に組み込むと例外が発生して動きません。 JDBCドライバ(Thinドライバ)をDriverManagerに登録するところ  Class.forName("oracle.jdbc.driver.OracleDriver"); でClassNotFoundExceptionが発生します。 何か設定が足りないのでしょうか? どこを確認すべきか教えてください。お願いします。 ちなみに環境は以下の通りです。 ・Windows2000 ・Apache1.3.26 ・Tomcat3.2.4 ・JDK1.3.1_02

    • ベストアンサー
    • Java
  • oracleへの接続

    Java初心者です。oracleについて勉強しているのですが なかなかうまくいきません。 Class.forName("oracle.jdbc.driver.OracleDriver"); Connection connection=DriverManager.getConnection("jdbc:oracle:thin:@dbserver:1521:oracle","test","test"); jdbc:oracle:thin:@(ホスト名):(ポート番号): (接続するデータベースのSID)   ↑   ↑ この接続するデータベースのSIDとはどういう意味なの でしょうか? もしかしたら追加質問をするかもしれないので よろしくお願いします。

  • javaからAccessをアクセスするときにファイルを直接指定できないのですか?

    JavaでMicrosoft Accessにアクセスするときに以下のプログラムでアクセスしました。 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:DBs"); このプログラムを作成する前にODBC データソース アドミニストレータでデータベースの登録を行いました。 データベース名はデータソース名に拡張子を付けた名前にしました。 ODBC データソース アドミニストレータの登録を行わずにプログラムの中にファイルの場所を記述してMicrosoft Accessにアクセスすることはできないのでしょうか?

  • Javaで、TomCatプロジェクトを使用したJDBCを使用したデータベースのアクセスについて教えてください。

    すぐに回答を! TomCatプロジェクトでDBアクセスできず困っています。 ●Javaプロジェクトの場合(成功)  ・Javaプロジェクト作成 → 新規 → クラスを作成。  ・プロジェクト選択 → メニューバー「プロジェクト」 → プロパティー   → Javaのビルド・パス → ライブラリーの追加 → ユーザーライブラリー   → 新規 → MySQLドライバを追加  ・次のソースの実行にて、JDBC Dirverの接続を確認。 [JdbcSample.java] import java.sql.*; class JdbcSample { public static void main(String[] args) { try { // 1.JDBC Driver の登録 Class.forName("com.mysql.jdbc.Driver").newInstance(); // 2.データベースへの接続 Connection con = DriverManager.getConnection( "jdbc:mysql://localhost/db1", "(ユーザー名)", "(パスワード)"); // 3.SQL ステートメント・オブジェクトの作成 Statement stmt = con.createStatement(); // 4.SQL ステートメントの発行 ResultSet rs = stmt.executeQuery("SELECT * from null_test_tbl"); // 5.結果の出力 while (rs.next()) { System.out.println(rs.getString("allow_null")); } // 6.データベースのクローズ rs.close(); stmt.close(); con.close(); } catch (SQLException e1) { System.out.println( "SQLException: " + e1.getMessage()); System.out.println( " SQLState: " + e1.getSQLState()); System.out.println( " VendorError: " + e1.getErrorCode()); } catch (Exception e2) { System.out.println( "Exception: " + e2.getMessage()); } } } ●TomCatプロジェクト作成の場合(失敗)  (1)TomCatプロジェクト作成 → 新規 → クラスを作成。  (2)プロジェクト選択 → メニューバー「プロジェクト」 → プロパティー   → Javaのビルド・パス → ライブラリーの追加 → ユーザーライブラリー   → 新規 → MySQLドライバを追加  (3)サーブレットからBeanの呼び出し。  「​http://localhost:8080/test_mvc/jdbcSample​」  (4)エラー「Exception: com.mysql.jdbc.Driver」 が発生。(ドライバーが見つかりません?) [servlet] package ne.jp; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestMvc extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { JdbcSample da = new JdbcSample(); try { da.dbAccessTest(); (※)←ここでBeanのデータベースアクセスメソッドを呼び出し } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } // HTML出力の準備 response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<html><body><p>こんにちわ!</p></body>"); } } [Bean] package ne.jp; import java.sql.*; class JdbcSample { //Beanコンストラクタ public JdbcSample(){ } //データベースアクセス確認 public void dbAccessTest(){ try { // 1.JDBC Driver の登録 Class.forName("com.mysql.jdbc.Driver").newInstance(); // 2.データベースへの接続 Connection con = DriverManager.getConnection( "jdbc:mysql://localhost/db1", "***", "*****"); // 3.SQL ステートメント・オブジェクトの作成 Statement stmt = con.createStatement(); // 4.SQL ステートメントの発行 ResultSet rs = stmt.executeQuery("SELECT * from null_test_tbl"); // 5.結果の出力 while (rs.next()) { System.out.println(rs.getString("allow_null")); } // 6.データベースのクローズ rs.close(); stmt.close(); con.close(); } catch (SQLException e1) { System.out.println( "SQLException: " + e1.getMessage()); System.out.println( " SQLState: " + e1.getSQLState()); System.out.println( " VendorError: " + e1.getErrorCode()); } catch (Exception e2) { System.out.println( "Exception: " + e2.getMessage()); } } }

    • ベストアンサー
    • Java
  • DB2のJDBCを使用したDBコネクションの取得方法の違い

    WebSphereとDB2を使用してDB2へアクセスしてテーブルからデータの取得をしたいと思っています。 このとき、DB2のJDBCを使用しますが、getConnectionでコネクションを取得するときに指定するDBのURLに、複数の指定方法があるようです。 その1: jdbc:db2:データベース名 その2: jdbc:db2://ホストIP:ポート番号/データベース名 その1の方法ではコネクションを取得できたのですが、その2の方法では失敗しました。 ホストIPには自分のマシンのIPを、ポート番号にはDB2をインストールしたときに設定した番号を指定しました。 この両者の違いをご存知の方は教えてください。 また、その2の方法でなぜ失敗したのか、見当がつく方がいたらこちらも教えていただきたいと思います。 なお、実行環境は以下の通りです。 CPU ペンティアム3 800Mhz メモリ 512MByte OS Windows2000 SP2 ブラウザ IE5.5 SP2 AS Websphere 4.0 DB DB2 7.2 ※WebshpereとDB2は同一マシンにインストールされています。

    • ベストアンサー
    • Java
  • JDBC-ODBC-MDB(日本語テーブル・カラム名)アクセスで、ODBC -1305エラー

    日本語のテーブル名・カラム名を使用したAccess(2000) mdb に JSPおよびServletからJDBC(ODBC経由)でアクセスすると、 SQL実行[executeQuery()]時に下記のエラーが発生します。 getMessage(): [Microsoft][ODBC Microsoft Access Driver] getErrorCode(): -1305 getSQLState(): S0002 ただし、 1.Javaアプリケーションから直接JDBC(ODBC経由)でアクセスすると正常に動作します(ResultSet取得)。 2.JSP・サーブレットからのアクセスでも、   2-1.テーブル名・カラム名がascii文字のテーブルの場合   2-2.テーブル名・カラム名が日本語でも、SQLで使わない場合      例:SELECT now()   の場合は、 正常に動作します(ResultSet取得)。 JSP Servletは   contentType="text/html; charset=Windows-31J"   pageEncoding="windows-31j" で、保存形式は 日本語Shift_JISです。 出力画面表示に文字化けはありません。 作業環境はノートPC1台で、  Tomcat: 5.5.27 JDK/JRE : 1.6.0_07  Eclipse: 3.4.2  OS:Vista Ultimate SP1  ODBCデータソース:システムDNS Microsoft Access Driver(*.mdb) 6.00.6001.18000 ODBCJT32.DLL です。 諸兄のお知恵を拝借お願いします。 ※エラーコードの内容は? ※どのあたりを調べればよいか? ========================= Servletの場合のStackTraceなど -- getMessage:[Microsoft][ODBC Microsoft Access Driver] getErrorCode:-1305 getSQLState:S0002 java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115) at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3111) at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338) at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253) ========================= JSPの場合のStackTraceなど -- getMessage:[Microsoft][ODBC Microsoft Access Driver] getErrorCode:-1305 getSQLState:S0002 java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115) at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3111) at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338) at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253) at org.apache.jsp.TestODBC_jsp._jspService(TestODBC_jsp.java:95) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)

専門家に質問してみよう