package mypack;
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
import java.util.*;
public class test
{
public static void main(String args[])
{
try
{

int t=0;

BookDB db=new BookDB();   //BookDB是访问数据库的类
Collection books=null;
     books= db.getBookDetailsByTitle("j");//返回包含书名中有j字母的所有书的collection集合
     Iterator i = books.iterator();
     while(i.hasNext())
     {
     t++;
     }
    
    System.out.println(t);//查看名字中包含j的书一共有多少本
}catch(Exception e) {e.getStackTrace();}
}
}BookDB:
public class BookDB {  private ArrayList books;
  private String dbUrl =  "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=BookDB";
  private String dbuser = "sa";
  private String dbpwd = "12342234";
  
    public BookDB () throws Exception{
     Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
  }  public Connection getConnection()throws Exception{...}
  
  public void closeConnection(Connection con){...}  public void closePrepStmt(PreparedStatement prepStmt){...}  public Collection getBookDetailsByTitle(String title) throws Exception
  {
    Connection con=null;
    //PreparedStatement prepStmt=null;
    Statement stmt= null;//
    ResultSet rs =null;
    //String aa= "%"+title+"%";
     books = new ArrayList();
    try {
      con=getConnection();
      String selectStatement = "select * " + "from books where title like '%"+title+"%'";
     // prepStmt = con.prepareStatement(selectStatement);
     stmt= con.createStatement();//
     
     // prepStmt.setString(1, aa);
      //rs = prepStmt.executeQuery();
      rs= stmt.executeQuery(selectStatement);//      if (rs.next()) {
        BookDetails bd = new BookDetails(rs.getString(1), rs.getString(2), rs.getString(3),
          rs.getFloat(4), rs.getInt(5), rs.getString(6),rs.getInt(7));
        //stmt.close();
        books.add(bd);       // return bd;
      }
      else {
        return null;
      }
    }finally{
      closeResultSet(rs);
      //closePrepStmt(prepStmt);
      stmt.close();
      closeConnection(con);
     
    }
    Collections.sort(books);
    return books;
  }为何执行test后,控制台只显示 press any key to continue
而不打印t呢???
高分!!!!!!!!!
up 有分
谢谢大家

解决方案 »

  1.   

    因为while(i.hasNext())不满足
    楼主应该检查i是否为空
      

  2.   

    真是有些诡异哦...真的没有Exception又没有打印t吗?
      

  3.   

    肯定是EXCEPTION了,就算i不满足,应该也要打出0的。你可以试试把EXCEPTION打出来。测试一下异常
      

  4.   

    既然没有异常就让他出现异常,,,int t=0;      ///声明t的时候。。不赋值。。就是  int t;看看他会出现什么结果
      

  5.   

    好象是数据库初始化问题,我望了把sqlserver2000的三个.jar文件加进classpath了,可是加了以后,就连那句press any key to contiune都没有了,只有一个光标闪来闪去????????????????????????????????
      

  6.   

    catch(Exception e) 
    {e.getStackTrace();}e.getStackTrace()返回的是StackTraceElement[]
    当发生错误的时候就不会有任何显示的内容了啊
      

  7.   

    建议楼主用下面的代码看看
    catch(Exception e) 
    {
    System.out.print(e.getMessage());
    }
      

  8.   

    to:阿发老头按照你的方法还是不行照样是只有一个光标我觉得程序在BookDB db=new BookDB();这句后就死掉了不在向下执行了
      

  9.   

    不是用if,要用while循环
          if (rs.next()) {
            BookDetails bd = new BookDetails(rs.getString(1), rs.getString(2), rs.getString(3),
              rs.getFloat(4), rs.getInt(5), rs.getString(6),rs.getInt(7));
            //stmt.close();
            books.add(bd);       // return bd;
          }
          else {
            return null;
          }
    改为
          while (rs.next()) {
            BookDetails bd = new BookDetails(rs.getString(1), rs.getString(2), rs.getString(3),
              rs.getFloat(4), rs.getInt(5), rs.getString(6),rs.getInt(7));
            //stmt.close();
            books.add(bd);       // return bd;
          }
      

  10.   

    if (rs.next()) {
            BookDetails bd = new BookDetails(rs.getString(1), rs.getString(2), rs.getString(3),
              rs.getFloat(4), rs.getInt(5), rs.getString(6),rs.getInt(7));
            //stmt.close();
            books.add(bd);       // return bd;
          }
          else {
            return null;
          }
    我发现楼主上面这个代码有问题,因为这样子的话,只能得到一条记录,如果得不到记录的话,那就返回null
    我完全同意楼上说的,改成while(),用循环读取所有记录后再排序
      

  11.   

    楼上两位细心
    但还是解释不了为什么既没有Exception又没有打印t
      

  12.   

    Exception即没有throw,也没有打印
    System.out.println(t);根本没有执行
      

  13.   

    public Collection getBookDetailsByTitle(String title) throws Exception你的返回类型不匹配吧
      

  14.   

    把BookDB改成:public BookDB () throws Exception{
        try{ 
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
           }catch(ClassNotFoundException e){System.out.println(e.getMessage());}
           }
    后问题依旧呀?
      

  15.   

    老兄,整个BookDB类就没有捕获异常,哪来的异常信息啊?
    catch一下吧!
    try{
       ...
    }catch(Exception e){
        e.printStackTrace();
    }