javaweb课程开发实训知识点随记
java.lang.NumberFormatException: empty String
在将字符串强制转换成double时,数据库查询的result字段值为空字符串,而强制转换成double类型的值不能为null或"",这样就导致报错。
解决方法:将强制转换前判断result是否为空字符串。
java中字符串判空
"".equals(str);
不能用==
jstl利用循环forEach
1)累加数据
<c:set var="sum" value="0"/>
<c:set var="cnt" value="0"/>
<c:forEach items="${pageBean.data}" var="p">
<c:set var="sum" value="${sum+p.NowPrice}"/>
<c:set var="cnt" value="${cnt+1}"/>
</c:forEach>
<table><tr>
<td style="font-size: 20px; color: red;">*七天*均价格为:${sum/cnt}</td></tr></table>
2)实现动态下拉列表
<select name="selectcate" style="width: 100px;height: 30px;">
<option value="">全部类别</option>
<c:forEach var="cate" items="${category.data}">
<option value="${cate.HaCate}">${cate.HaCate}</option>
</c:forEach>
</select>
MySQL实现表的级联删除
一般来说,表有外键的话,外键字段必须要建索引。
原因是如果没有索引,插入数据时会锁住整张表,而不是特定的行,这样高并发时就有性能问题。
ON DELETE CASCADE 级联删除
ON UPDATE CASCADE 级联更新
删除/添加外键约束:
alter table hardware drop foreign key hardware_ibfk_1;
alter table hardware add constraint hardware_ibfk_1 foreign key (HaCate) references catagory (HaCate) on delete cascade on update cascade;
MySQL查找几天内数据
//包含当天
SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW())<=0 AND DATEDIFF(字段,NOW())>-n
//不包含当天
SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW())<0 AND DATEDIFF(字段,NOW())>-n
文件上传
思路:最终只用存地址到数据库中,但是需要把文件真实存入项目目录下。
文件上传jsp页面的表单提交形式以二进制流文件输出
<form action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data">
提交到servlet后:
- 调用ServletFileUpload API
Boolean isMultipart = ServletFileUpload.isMultipartContent(request);
//解析和检查请求,是否是post方式,是否是二进制流格式
if (!isMultipart) {
return; //如果不是就不用上传了
}
- isFormField()判断某项是否为普通表单类型(file就不是)
for (FileItem item : items) {
if (item.isFormField()) {//普通的表单控件
if (fileName.equals("HaNo")) {//获取表单属性HaNo的值
HaNo = item.getString("GB2312");
}
}
}
- 将文件存入某个路径
item.write(new File(path, realname)); //把上传的文件保存到某个文件中
项目已上传GitHub https://github.com/JiYixhu/DatabasePT