0

私は以下のjspを持っています。

    <%-- 
    Document   : See_Free_Editors
    Created on : Aug 16, 2013, 7:22:30 PM
    Author     : u0138039
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title> <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
        <script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>

        <script type="text/javascript">
            $(function() {
                $(".datepicker").datepicker();
            });
            xmlHttp = new XMLHttpRequest();
            function getUsers()
            {
            xmlHttp.onreadystatechange=
                    function()
            {
                if(xmlHttp.readyState===4 && xmlHttp.status===200)
                    {
                        document.getElementById('b').innerHTML=xmlHttp.responseText; 
                   }
                   else
                       {
                           document.getElementById('b').innerHTML="Waiting";
                       }
            };


            xmlHttp.open("post", "see_frm_DB.jsp", true);
            xmlHttp.send();
 }
        </script>
        <style>
            .ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 0.6em; }
        </style>
    </head>
    <body>
        <div id="a">
            <table>
                <tr>
                    <td><label>Date Request received
                        </label>&nbsp;</td>
                    <td><input type='text' class='datepicker' name='date1' id="date1"></td>
                    <td><label>Date Request received
                        </label>&nbsp;</td>
                    <td><input type='text' class='datepicker' name='date2' id="date2"></td>
                    <td><input type="button" id="button" name="button" value="submit" onclick="getUsers();"></td>
                </tr>
            </table>
        </div>
        <div id="b">
        </div>
    </body>
</html>

そして接続は以下の通りです。

 <%-- 
    Document   : index
    Created on : Aug 19, 2013, 8:07:29 PM
    Author     : U0138039
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@include file="DBCon.jsp"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%
            try{
        String a=request.getParameter("date1");
        String b=request.getParameter("date2");
        out.println(a);
        out.println(b);
        stmt=conn.createStatement();
        sql="select * from [Sheet1$] where [Date Request received] between '"+a+"' and '"+b+"'";
        out.print(sql);
        rs=stmt.executeQuery(sql);
        ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
       int count = rsmd.getColumnCount();
      conn.commit();
           stmt.close();
           conn.close();
      %>
<table border="1">
    <tr>
        <%
// The column count starts from 1
for (int i = 1; i < columnCount + 1; i++ ) {
  String name = rsmd.getColumnName(i);
  // Do stuff with name%>
  <td nowrap> <%
  out.print(name);%></td>
       <%
}%>
  </tr>
<%
while(rs.next())
{
%>
 <tr>
  <%



 for (int i=1; i<count; i++) {%>

        <td>
            <%=rs.getString(i)%> <%}%>

     <% 
}
      }
            catch(Exception e)
            {
                out.print(e);
            }
      %>
          </td>
 </tr>
</table> 
        %>
    </body>
</html>

このプログラムを実行しようとすると、以下のエラーが発生します。実際には、値が渡されていません。

 null null select * from [Sheet1$] where [Date Request received] between 'null' and 'null'java.sql.SQLException: [Microsoft][ODBC Excel Driver] Data type mismatch in criteria expression. %>

これを解決する方法を教えてください。

ありがとう

4

1 に答える 1

1

まず、フォーム JSP では、AJAX リクエストで date1/date2 パラメータを送信していないため、request.getParameter(...) は null です。修正するには、次のように変更xmlHttp.send()します。

xmlHttp.send("date1=" + document.getElementById('date1').value + "&date2=" + document.getElementById('date2').value);

次に、接続 JSP で、入力をサニタイズする必要があります。現在のコードは、必要なパラメーターが設定されているかどうかをチェックしません。また、要求パラメーターを SQL クエリに直接挿入しているため、SQL インジェクション攻撃も可能です。次のようなことを試してください:

String a=request.getParameter("date1");
String b=request.getParameter("date2");

if (a == null || b == null) {
    // bail out here
    out.print('data1 and date2 are required');
} else {
    // use a prepared statement where we can safely insert the parameters
    sql="select * from [Sheet1$] where [Date Request received] between ? and ?";
    stmt=conn.prepareStatement(sql);
    stmt.setString(1, a);
    stmt.setString(2, b);
    rs=stmt.executeQuery();
}
于 2013-08-19T15:50:38.810 に答える