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 有分
谢谢大家
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 有分
谢谢大家
楼主应该检查i是否为空
{e.getStackTrace();}e.getStackTrace()返回的是StackTraceElement[]
当发生错误的时候就不会有任何显示的内容了啊
catch(Exception e)
{
System.out.print(e.getMessage());
}
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;
}
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(),用循环读取所有记录后再排序
但还是解释不了为什么既没有Exception又没有打印t
System.out.println(t);根本没有执行
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
}catch(ClassNotFoundException e){System.out.println(e.getMessage());}
}
后问题依旧呀?
catch一下吧!
try{
...
}catch(Exception e){
e.printStackTrace();
}