我有一个表tbIndividual
,说有4列:ID
, I_Name
, FName
和LName
的个人。
现在我想搜索个人在我的web应用程序在这样一种方式,当我按下' a '个人的名字以' a '开头的所有出现在我的页面下面的表格形式,如果我按下一个按钮说'B',那么只有符合条件的个人留在页面上,所有其他的都消失了。
我正在学习JSP和AJAX。
但是没有得到想要的输出。请帮忙
下面是我的代码:<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SEARCH DATABASE</title>
<script>
function showuser(str)
{
var xreq;
if(str=="")
{
document.getElementById("showtext").innerHTML="";
return;
}
if(window.XMLHttpRequest)
{
xreq=new XMLHttpRequest();
}
else
{
xreq=new ActiveXObject("Microsoft.XMLHTTP");
}
xreq.onreadystatechange=function ()
{
if((xreq.readyState==4) && (xreq.status==200))
{
document.getElementById("showtext").innerHTML=xreq.responseText;
}
}
xreq.open("get","getdata.jsp?q="+str,"true");
xreq.send();
}
</script>
</head>
<body>
<form>
<input type="text" id="txt1" onkeyup="showuser(this.value)">
</form>
<br />
<div id="showtext">THE DATA IS</div>
</body>
</html>
建立连接并在表中打印结果的getuser.jsp
如下。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MY DATA</title>
</head>
<body>
<%!Connection con; %>
<%!PreparedStatement s; %>
<%!ResultSet rs; %>
<%
String name=request.getParameter("txt1");
out.println(name);
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:SharedCryptography", "fyp", "fyp");
String sql="select * from tbIndividual where I_NAME like ?";
s = con.prepareStatement(sql);
s.setString(1, name + "%");
rs=s.executeQuery();
}
catch(Exception e){
e.printStackTrace();
}
%>
<div id="dtl_table"><table border='3' cellpadding='5' cellspacing='2' width="400px">
<tr bgcolor="66FF00">
<th>ID</th>
<th>NAME</th>
<th>FIRSTNAME</th>
<th>LASTNAME</th>
</tr>
<tr>
<% while(rs.next())
{ %>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td>
<td><%=rs.getString(4)%></td>
<% } %>
</tr>
</table></div>
</body>
</html>
请帮助。我没有得到任何错误,但也没有得到结果。
编辑:individualdetails.jsp
<body>
<%!Connection con; %>
<%!PreparedStatement s; %>
<%!ResultSet rs; %>
<% String idperson=request.getParameter("personid");
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:SharedCryptography", "fyp", "fyp");
String sql="select * from tbIndividual where I_ID=?";
s = con.prepareStatement(sql);
s.setString(1,idperson);
rs=s.executeQuery();
}
catch(Exception e){
e.printStackTrace();
}
</body>
看,根据我的知识查询你写的是完美的,甚至它保护sql攻击。
在JSP页面中使用了
<input type="text" id="txt1" onkeyup="showuser(this.value)">
,因为request.getParameter()使用属性名而不是id。所以在服务器端,它的值是null,查询是针对null%触发的,所以它可能不会来。
所以将上面的代码替换为下面的
<input type="text" id="txt1" name="tx1" onkeyup="showuser(this.value)"/>
现在试试吧