<%@ 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);
有些问题,后面少一个空格,你自己检查下吧
楼上的说的是正确的
估计你的
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,问题解决!
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楼,果然是少了个空格,现在对了,谢谢了。
回2楼,果然是少了个空格,现在对了,谢谢了。
#5
回1楼:是这样吗?catch(SQLException e){e.printStackTrace();} 这样显示的还是空白。。。
#6
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);
有些问题,后面少一个空格,你自己检查下吧
楼上的说的是正确的
估计你的
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,问题解决!
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楼,果然是少了个空格,现在对了,谢谢了。
回2楼,果然是少了个空格,现在对了,谢谢了。
#5
回1楼:是这样吗?catch(SQLException e){e.printStackTrace();} 这样显示的还是空白。。。
#6
e.printStackTrace()的意思是打印出异常的堆栈信息