ドロップダウンメニューの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
}// クラス終了
助けてください!