-4

JSPを使用してOracleからデータをフェッチしたい。フォームのテキストボックスから複数のパラメータを渡す必要があります。

<form method="post" action="num_post.jsp">
Enter Number: <input name="num" type="text" id="num" />

<input type="submit" name="Submit" value="Submit" />
</form>

ここのテキストフィールドでは、123、456、789、896などの複数のパラメータを渡します。

これで、num_post.jspに、JSPで渡されたパラメーターを要求するためのこのコードがあります。

<%
 String[] num=request.getParameterValues("num");

 int i=0;

 for(i=0;i<num.length;i++)
 {
      out.println("number Elements       :"+num[i]+"<br/>");
 }
%>

次に、配列パラメータを使用してOracleからデータをフェッチします。次に例を示します。num[i]

<%@page import="java.sql.*"%>
<%@ page import = "java.io.*"%>
<%
 Class.forName("oracle.jdbc.OracleDriver");
 Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
 Statement st=con.createStatement();
 String sql = "SELECT * from jha where num IN '"+num[i]+"'" ;
 ResultSet rs = st.executeQuery(sql);
 %>

これは例外をスローしArrayOutOfBoundます。

4

1 に答える 1

0

これを試して

String[] num=(request.getParameter("num").toString()).split(",");

それ以外の

String[] num=request.getParameterValues("num");

=====更新=====

指定したように、ArrayIndexOutOfBoundは、配列からインデックス外にアクセスしようとしていることを意味します。そして、それは明らかです

String[] num=(request.getParameter("num").toString()).split(","); // let say array size would be 4
int i=0;  // i initialized by 0

 for(i=0;i<num.length;i++)
 {
      out.println("number Elements       :"+num[i]+"<br/>"); 
 }
  // when control reached here, the value of i will be 4 (which is out of index)

4ここで、クエリで、そこにないインデックス要素にアクセスしようとしています。

"SELECT * from jha where num IN '"+num[i]+"'"   // here value  of i is 4

これが、 ArrayIndexOutOfBoundを取得している理由です。とった ???

もう1つ、そこに記述したクエリは、配列から1つの値のみをチェックするために適用できます。したがって、クエリを変更する必要があります。期待される出力は表示されません。

于 2012-12-23T05:41:12.710 に答える