2014-04-28 43 views
1
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<%@page import="java.sql.*,java.io.*,java.lang.*,java.util.*,javax.servlet.*" %> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Guilty agents</title> 
</head> 
<body> 
     <table> 
     <tr> 
     <td> Agent </td> 
     <td> Guilt Probability </td> 
     </tr>   
    <% 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    Connection con1=DriverManager.getConnection("jdbc:odbc:leak"); 
    Connection con2=DriverManager.getConnection("jdbc:odbc:dld"); 
    ResultSet rs1,rs2; 
    int T=0,TiS=0; 
    float S=1; 
    float RiS[]=new float[4]; 
    Statement s1=con1.createStatement(); 
    Statement s2=con2.createStatement(); 

    String query1="select fileName from Leaked"; 
    String query2="select Filename from Data"; 
    try { 
     rs1=s1.executeQuery(query1);//leaked 
     rs2=s2.executeQuery(query2);//Data 
     while(rs1.next()){ 
     S++; 
     while(rs2.next()){ 
     T++; 
     if(rs1.getString(1).equalsIgnoreCase(rs2.getString(1))) 
      TiS++; 
     } 
     } 
    String query3="select fileName from Leaked"; 

     rs1=s1.executeQuery(query3); 
     while(rs1.next()){ 
     for(int i=1;i<=4;i++){ 
     query2="select FileName from agent"+(char)i; 
     rs2=s2.executeQuery(query2); 
     while(rs2.next()) 
     if(rs1.getString(1).equalsIgnoreCase(rs2.getString(1))) 
      RiS[i]++; 
     %> 
     <tr><td>Agent<%out.println(i);%></td> 
      <td><%out.println(RiS[i]/S);%></td> 
     </tr> 
     <% 
     } 
     } 
     } 
    catch(SQLException e) 
     {out.println(e);}%> 
    </table>  
<% 
    con1.close(); 
    con2.close(); 
%> 
</body> 
</html> 

这是我的jsp页面,用于从2个数据库中检索和显示数据。 DSN存在漏洞。当我尝试执行此代码时,虽然表中使用了所有表中的数据,但未显示数据。此外,当我尝试使用printStackTrace()时,它什么也不显示。请帮忙!在jsp中使用ms访问没有发现数据异常

回答

0

你的第一while回路排出rs1

while(rs1.next()){ 
    S++; 
    while(rs2.next()){ 
    T++; 
    if(rs1.getString(1).equalsIgnoreCase(rs2.getString(1))) 
     TiS++; 
    } 

该循环仅当在rs1(即,rs1.next()false)没有更多的行结束。 这样做了之后,您尝试以下操作:

while(rs1.next()){ 

由于rs1已经耗尽,该循环永远不会启动,并打印什么。