从我接触代码开始,只要我面对代码,就进入了哄孙子的状态,在孙子面前,我就没对过。在这里面,栽跟头最多的就是中英文符号了,就最近一次的关于符号错误的小问题说说,来开始我的第一篇博客吧。
先说说工程问题,在displayStu.jsp中,显示数据库中所有学生的信息列表,而且在每一个学生信息后面加上“删除”链接,用户单击后,会删除对应的学生。
看着老师代码一个字母一个字母抄的代码!
来看看displayStu.jsp,没有报错,这个也没什么好错的
<%@ page language="java" import="java.sql.*" pageEncoding="gb2312"%>
<html>
<body>
单击连接,删除学生
<table border = "1">
<tr bgcolor = "blue">
<th>学号</th>
<th>姓名</th>
<th>性别</th>
<th>删除</th>
</tr>
<%
Class.forName("com.mysql.jdbc.Driver");
Connection conn =
DriverManager.getConnection("jdbc:mysql://localhost:3306/database","root","root");
String sql="SELECT STUNO,STUNAME,STUSEX FROM T_STUDENT";
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery(sql);
while(rs.next()){
String stuno=rs.getString("STUNO");
out.println("<tr>");
out.println("<td>" + stuno + "</td>");
out.println("<td>" + rs.getString("STUNAME") + "</td>");
out.println("<td>" + rs.getString("STUSEX") +"</td>");
out.println("<td><a href ='deleteStu.jsp?stuno = " + stuno + "'>删除</a></td>");
out.println("</tr>");
}
stat.close();
conn.close();
%>
</table>
</body>
</html>
也没有报错deleteStu.jsp,嗯
<%@ page language="java" import="java.sql.*" pageEncoding="gb2312"%>
<html>
<body>
<%
String stuno = request.getParameter("stuno");
Class.forName("com.mysql.jdbc.Driver");
Connection conn =
DriverManager.getConnection("jdbc:mysql://localhost:3306/database","root","root");
Statement stat = conn.createStatement();
String sql="DELETE FROM T_STUDENT WHERE STUNO='"+stuno+"'";
stat.executeUpdate(sql);
stat.close();
conn.close();
%>
<%=stuno%>被成功删除,<a href="displayStu.jsp">回到displayStu.jsp</a>
</body>
</html>
真的我看起来写的跟老师的一毛一样啊,小伙伴也是这样被骗了啊,可是我部署好运行,点击删除出来是这样sei儿的
地址栏里你可以很清楚的看到学号值有木有?
http://localhost:8080/Prj04/deleteStu.jsp?stuno = 120
但是接收传值就是为空,像下面这行结果:
null被成功删除,回到displayStu.jsp
所以,我看了两天,重写了两边,又调试了好几遍,终于,我还是没解决这个问题!!
所以我就拿着这个小问题去问老师了,在此感叹一句,代码经验丰富的人真是火眼金睛,老师让我把代码打包发过去,调试运行了一下就发现了问题,多了个空格!
没错!就是多了个空格!!
好了,牢骚发完了,正经说:
我们知道,空格其实是有ASCII码值的,在Javaweb中,会自动把你的英文空格忽略掉,而中文空格出现,会以ASCII码形式被编译,而我个人习惯,也是为了美观,会在“=”两边加空格,还有其他看起来拥挤的地方,但是在这过程中,我不能保证中英文的完全正确转换或者不小心碰到什么键,所以在url传值的时候,要是其中一方多了个空格,那么就会导致两边参数不一致,值无法正常传递。
在以后的类似错误中,我们也可以通过观察地址栏信息找问题,比如我的程序,地址栏中虽然有参数值被传递过来了,但是会发现多了个空格,传递的值是“空格stuno”,所以不能被接收到。
好了,第一次的感悟就这么多了,或许这中错误在代码的长途中很微不足道啊~~