0

ドロップダウンメニューのWebページからユーザーが選択したクエリを実行し、コードが接続されているDB2データベースからのデータを表示するJavaでMVC構造を使用するWebアプリケーションを開発しています。

これを正常に実行できるようにコードを設定しました。ただし、接続を確立するのは初めてです。ブラウザーに戻って別のコマンドを選択すると、Web ページには何も表示されず、Eclipse のコンソールに次のエラーが表示されます。

SQLException: [jcc][t4][2034][11148][4.13.127] 会話の割り当て解除の原因となった配布プロトコル エラーのため、実行に失敗しました。DRDA データ ストリームの構文エラーが検出されました。理由: 0x2110。ERRORCODE=-4499、SQLSTATE=58009 VendorError: -4499

コードは次のとおりです。ファイルからの情報の読み込みはまだ実装していませんが、すべての情報は別のクラスを介して静的定数として利用できます。はい、dbURL は DB2 データベースの正しい形式です jdbc:db2://dbURL:port#/databaseName

パッケージrpTool;

/* * クラスの目的: * 適切に * 外部の場所 (この場合は「config.properties」ファイル) からユーザー情報をロードしながら、サーバーへの接続を確立するため。* このクラスは、確立された接続を閉じることもできます。*/

public class DConnection { プライベート String jdbcDriver; // ドライバー名 private String dbUrl; // データベース URL プライベート String userID; // データベースにアクセスするためのユーザー名 private String password; // データベースアクセス用のユーザーパスワード

/*
 * loads database and user credentials to access data in code
 * from a separate .properties file and assigns those values to
 * 'jdbcDriver', 'dbUrl', 'userID', 'password'.
 */

public void loadProperties(){


   try {

    // database credentials from static constants in another class
            // This is only temporary
    System.out.println("getting jdbc url constants: " );
    jdbcDriver = EmdDBConstants.dbDriver;
    dbUrl =  EmdDBConstants.databaseUrl;
    userID =  EmdDBConstants.userID;
    password =  EmdDBConstants.password;

    System.out.println(jdbcDriver);
    System.out.println("dbUrl = " + dbUrl);


    //createConnection();
   } 
   catch (IOException ex) {
    ex.printStackTrace();
       }        
    }

/*
 * Establishes a connection to the database and returns it
 * so that it can be used to verify a vailid connection
 * has been made.
 */
public Connection getConnection(){

   try{ 
    // the driver allows you to query the database with Java.
    // forName dynamically loads the class for you
    System.out.println("getConnection:    getting jdbc url constant: " );
    Class.forName(jdbcDriver);


    return DriverManager.getConnection(dbUrl, userID, password);
   }
   catch(SQLException ex){

    System.out.println("SQLException: " + ex.getMessage());

    System.out.println("VendorError: " + ex.getErrorCode());
    return null;
   }
   catch(ClassNotFoundException e){
    // logs if the driver can't be found
    e.printStackTrace();
    return null;
   }
}// end getConnection

// close a connection
public void closeConnection(Connection con){
    try {

        if(con == null){
            System.out.println("No Connection...");
        }
        else{
            con = getConnection();
            con.close();
        }
    }
    catch (SQLException e) {

        e.printStackTrace();
    }
}// end close connection

}

これは、接続を確立し、Web ページからユーザーが選択したコマンドを実行する Java サーブレットです。

public class ProcessQuery extends HttpServlet { private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public ProcessQuery() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{

    //String sqlStatement = request.getParameter("sqlStatement");
    String url = "/test.jsp";
    String sqlStatement = request.getParameter("querySelector");
    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
    String sqlResult;
    System.out.println("ProcessQuery doPost entry: " );

    try 
    {

        DConnection conn = new DConnection();
        conn.loadProperties();
        Connection connect = null;
        connect = conn.getConnection();
        if(connect != null)
        {

            System.out.println("good connection...");

            Statement statement = connect.createStatement();

            // parse the SQL string
            if (sqlStatement != null)
            {
                  sqlStatement = sqlStatement.trim();
                  if(sqlStatement.length() >= 6)
                  {

                      String sqlType = sqlStatement.substring(0, 6);

                      if(sqlType.equalsIgnoreCase("select")){

                          // create the HTML for the result set
                          ResultSet resultSet = statement.executeQuery(sqlStatement);
                          sqlResult = SQLUtil.getHtmlTable(resultSet);
                          resultSet.close();
                          request.setAttribute("variable", sqlResult);
                          dispatcher.forward(request, response);
                      } // end if 
                      else
                      {

                          int i = statement. executeUpdate(sqlStatement);
                          if(i==0){ // a DDL statement
                              sqlResult = "The statement executed successfully.";
                              request.setAttribute("variable", sqlResult);
                              dispatcher.forward(request, response);
                          } // end if
                          else{ // an INSERT, UPDATE, or DELETE statement
                              sqlResult = "The statement executed successfully.<br" +
                                      + i + " row(s) affected.";
                              request.setAttribute("variable", sqlResult);
                              dispatcher.forward(request, response);
                          } // end else
                      } // end else
                } // end if
                else
                {
                  request.setAttribute("variable", "sqlStatement is null");
                  dispatcher.forward(request, response);
                }   // end else
                    statement.close();
                    connect.close();
            }// end if
        }// end if
        else{
            System.out.println("no connection...");
            request.setAttribute("variable", "no connection...");
            dispatcher.forward(request, response);              
        }
    }// end try
    catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }// end catch   
}// end doPost

}// クラス終了

助けてください!

4

0 に答える 0