老是被捕捉到错误catch(SQLException e)

时间:2021-11-01 02:01:39
我初学不久,以下是两个jsp文件:调用数据库排序查找。
<%@ page contentType="text/html;charset=GB2312"%>
<HTML>
<BODY>
<P>查询成绩:
<FONT Size=4>
<FORM action="byname1.jsp" method=post name=form>
<INPUT type="radio" name="R" value="name">按姓氏排序
<INPUT type="radio" name="R" value="math+english+physics">按总分排序
  <INPUT type="radio" name="R" value="english">按英语排序
<br>
  <INPUT type=submit name="g" value="提交">
</FONT>
</FORM>
</BODY>
</HTML>
————————————————————————————
byname1.jsp
<%@ page contentType="text/html; charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html><body>
<%
String name=request.getParameter("R");
 if(name==null)
  {name="";}
 byte b[]=name.getBytes("ISO-8859-1");
 name=new String(b);

 Connection con=null;
 Statement sql=null; 
 ResultSet rs=null;
 int math,english,physics;
 String number,xingming;
 String dbUrl ="jdbc:mysql://localhost/first?useUnicode=true&characterEncoding=GB2312";
 try{
     Class.forName("com.mysql.jdbc.Driver").newInstance();
    }
     catch(ClassNotFoundException e){}
 try{
     con=DriverManager.getConnection(dbUrl,"root","1");
     sql=con.createStatement();
     rs=sql.executeQuery("SELECT * FROM grade ORDER BY"+name);
     out.print("<Table Border>");
     out.print("<tr>");
     out.print("<th width=100>"+"学号");
     out.print("<th width=100>"+"姓名");
     out.print("<th width=50>"+"数学成绩");
     out.print("<th width=50>"+"英语成绩");
     out.print("<th width=50>"+"物理成绩");
     out.print("<th width=50>"+"总成绩");
     out.print("</tr>");
    while(rs.next())
    {
      out.print("<tr>");
      number=rs.getString(1);
      out.print("<td>"+number+"</td>");
      xingming=rs.getString(2);
      out.print("<td>"+xingming+"</td>");
      math=rs.getInt("math");
      out.print("<td>"+math+"</td>");
      english=rs.getInt("english");
      out.print("<td>"+english+"</td>");
      physics=rs.getInt("physics");
      out.print("<td>"+physics+"</td>");
      int total=math+english+physics;
      out.print("<td>"+total+"</td>");
      out.print("</tr>");
 }
out.print("</Table>");
 con.close();
  }
 catch(SQLException e){out.print("ee");}
%>  

</BODY>
</HTML>

运行老是被 catch(SQLException e){out.print("ee");}捕捉到。

6 个解决方案

#1


怎么不把异常打印出来看呢。。。在catch里e.printStackTrace(); 看看  你这样就输出“ee” 不麻烦嘛。。

#2


你的异常捕获挺有意思的,有用的被你删了没有用的你要打印出来
楼上的说的是正确的
估计你的
rs=sql.executeQuery("SELECT * FROM grade ORDER BY"+name);
rs=sql.executeQuery("SELECT * FROM grade ORDER BY "+name);

有些问题,后面少一个空格,你自己检查下吧

#3


问题很简单

1.注意这句话
if(name==null)
{name="";}
这句话的意思是name可以为空字符串

2.再看这句话
rs=sql.executeQuery("SELECT * FROM grade ORDER BY"+name);

两句话综合看,当name为空字符串时候,你这个SQL就有问题了

试验:
你在数据库中执行下面的SQL
SELECT * FROM grade ORDER BY ""
是不是出错误了?就是这里

修改方法:
把rs=sql.executeQuery("SELECT * FROM grade ORDER BY"+name);改为
String strSql = "SELECT * FROM grade ORDER BY";
if (!"".equals(name)) {
    strSql = "SELECT * FROM grade ORDER BY"+name;
}

需要你考虑:
要根据你的业务在进行修改,我只是根据你的问题作了避免error发生的修改,具体还要根据你的业务

OK,问题解决!

#4


回1楼:其实本来我写的是catch(SQLException e){}。发现老空白,后来试着加了out.print("ee");果然是这里出了问题。”e.printStackTrace();“是怎么用的可以解释下吗?
回2楼,果然是少了个空格,现在对了,谢谢了。

#5


回1楼:是这样吗?catch(SQLException e){e.printStackTrace();} 这样显示的还是空白。。。

#6


引用 5 楼 ryangain 的回复:
回1楼:是这样吗?catch(SQLException e){e.printStackTrace();} 这样显示的还是空白。。。

e.printStackTrace()的意思是打印出异常的堆栈信息

#1


怎么不把异常打印出来看呢。。。在catch里e.printStackTrace(); 看看  你这样就输出“ee” 不麻烦嘛。。

#2


你的异常捕获挺有意思的,有用的被你删了没有用的你要打印出来
楼上的说的是正确的
估计你的
rs=sql.executeQuery("SELECT * FROM grade ORDER BY"+name);
rs=sql.executeQuery("SELECT * FROM grade ORDER BY "+name);

有些问题,后面少一个空格,你自己检查下吧

#3


问题很简单

1.注意这句话
if(name==null)
{name="";}
这句话的意思是name可以为空字符串

2.再看这句话
rs=sql.executeQuery("SELECT * FROM grade ORDER BY"+name);

两句话综合看,当name为空字符串时候,你这个SQL就有问题了

试验:
你在数据库中执行下面的SQL
SELECT * FROM grade ORDER BY ""
是不是出错误了?就是这里

修改方法:
把rs=sql.executeQuery("SELECT * FROM grade ORDER BY"+name);改为
String strSql = "SELECT * FROM grade ORDER BY";
if (!"".equals(name)) {
    strSql = "SELECT * FROM grade ORDER BY"+name;
}

需要你考虑:
要根据你的业务在进行修改,我只是根据你的问题作了避免error发生的修改,具体还要根据你的业务

OK,问题解决!

#4


回1楼:其实本来我写的是catch(SQLException e){}。发现老空白,后来试着加了out.print("ee");果然是这里出了问题。”e.printStackTrace();“是怎么用的可以解释下吗?
回2楼,果然是少了个空格,现在对了,谢谢了。

#5


回1楼:是这样吗?catch(SQLException e){e.printStackTrace();} 这样显示的还是空白。。。

#6


引用 5 楼 ryangain 的回复:
回1楼:是这样吗?catch(SQLException e){e.printStackTrace();} 这样显示的还是空白。。。

e.printStackTrace()的意思是打印出异常的堆栈信息