我们在开发中经常会遇到这样的问题。Mysql数据库里表的自增主键ID号经过一段时间的添加与删除之后乱了,这样如果你在前端显示这个ID号的时候会出现序号不连续的问题。如何解决这个问题呢:
方法一:修改数据库重新设置主键ID
1,删除原有主键:
ALTER TABLE `table_name` DROP `id`;
2,添加新主键字段并设置主键:
ALTER TABLE `table_name` ADD 'id' mediumint(6) PRIMARY KEY NOT NULL AUTO_INCREMENT FIRST;
这种方法有很大的缺点:需要改变数据库从而造成不必要的资源浪费。要知道ID是数据唯一性的标识,只要标识唯一即可。它是数据查询、存储的依据而不是为前端按照顺序显示而服务的。所以我们修改数据库里的ID得不偿失。
方法二、运用JAVA语言里的JSTL标签和EL表达式,在不改动数据库的前提下完美实现数据条目按顺序重新排列
我们知道在前端显示排序好的ID序号只是前端显示的效果而以,那么能不能不改动数据库而在前端显示方法下功夫来实现效果呢。经过本人一个下午的研究得出了方法二。它可以实现在不改动数据库的前提下实现数据条目按顺序重新排列的效果。
1、 在实现本方法之前我们要复习一下JSTL、C标签在页面创建变量及使用变量的方法。我们只要注意它的写法格式就可以了。
<c:set var="sum" value="${sum+j.comd.quantitynum * j.goods.tariff }" />
2、在前端的jsp页面代码里加入table表格标签里的内容。注意jsp页面里
必须在页首加入如下两句话,来引入JSTL和EL表达示的依赖 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
如图
3.创建完成jsp页面后加入下面代码如下:
<table class="tb">
<caption><a href="word/initAdd">【新增】</a></caption>
<tr>
<th >编号</th>
<th>单词</th>
<th>音标</th>
<th>中文</th>
<th>词义解释</th>
<th>操作</th>
</tr>
<%--JSTL标签主要的循环操作方法,以forEach包裹循环体.注意:下面的orderId必须被forEach语句包裹才会实现自增功能。--%>
<c:forEach items="${words}" var="word" >
<%--var="orderId"是对前端需要显示序号列的命名;${orderId=orderId+1}这是EL表达式,目的是对于序号的自增操作。--%>
<c:set var="orderId" value="${orderId=orderId+1}"/>
<tr>
<%--引入自增变量实现自增序号--%>
<td>${orderId}</td>
<td>${word.eword}</td>
<td>${word.phonetic}</td>
<td>${word.cword}</td>
<td><textarea rows="3" >${word.trans}</textarea></td>
<td><a href="word/initUpdate?wordId=${word.wordId}">更新</a>|
<a href="word/deleteWord?wordId=${word.wordId}">删除</a>|
</td>
</tr>
</c:forEach>
<caption> <a href="word/expotExcel">【将数据保存到Excel中】</a></caption>
</table>
以上就是代码实现过程。根本没有涉及底层的JAVA代码以及数据库就可以实现序号自动排序自增。效果图: