一、关于连接数据库插入数据乱码问题
情景:从jsp通过表单传递数据到servlet中插入数据库
我检查了数据库的默认设置编码,以及jsp的encoding都是utf-8编码;都没发现有问题;
解决:最后在servlet里写入了
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
成功解决,原因估计是表单传来的数据是utf-8的,但是servlet里取出来的时候不是按照utf-8解码的,导致传入到数据库里就是乱码,和数据库的编码没关系。
二、分页用的sublist
一开始模仿的写法是这个
@Override
2 public List<Student> queryStudentsByArray(int currPage, int pageSize) {
3 List<Student> students = studentMapper.queryStudentsByArray();
4 // 从第几条数据开始
5 int firstIndex = (currPage - 1) * pageSize;
6 // 到第几条数据结束
7 int lastIndex = currPage * pageSize;
8 return students.subList(firstIndex, lastIndex);
9 }
但是这个代码有一个很坑人的bug。讲这个bug之前得讲一个东西:list是一个接口,Arraylist是实现了这个接口的具体子类.然后Arraylist的sublist返回的类型也叫list,但是坑人的地方开始了,这里返回的list是Arraylist里面的子类。所以如果你按照上面的去做就会返回错误的函数类型。(坑人博主,错误代码都发,祝你买菜涨价,超级加倍)最后解决方法就是再创建一个list(正确函数返回的list,接口的list),将返回的子类list付给list,这是可以的,因为list是Arraylist的接口。另一个list又是Arraylist的子类,所以是可以的。代码如下:
List<book> subList =new ArrayList<book>(bookslist.subList(firstIndex, bookslist.size()));
我的完整函数代码
//分页查询
public static List<book> queryPage(int currPage,int pageSize) throws SQLException {
List<book> bookslist = new ArrayList<book>();
bookslist= query();
//4 // 从第几条数据开始
int firstIndex = (currPage - 1) * pageSize;
//6 // 到第几条数据结束
int lastIndex = currPage * pageSize;
if(bookslist.size()<lastIndex){
List<book> subList =new ArrayList<book>(bookslist.subList(firstIndex, bookslist.size()));
//bookslist.subList(firstIndex, lastIndex);
return subList;
}
List<book> subList =new ArrayList<book>(bookslist.subList(firstIndex, lastIndex));
//bookslist.subList(firstIndex, lastIndex);
return subList;
}