学生管理系统设计新建用户的时候遇到了两个问题:第一个是时间的传递,第二个是关于中文的传递。这两个都是很常见的问题形式,在这里将我的解决方案给大家分享一下。
第一个问题:在前端输入的时间到数据库中无法准确保存
问题描述:在前端的jsp页面输入的时间(在前端输入的时间格式没有问题),在经过后面的SQL语句之后变得时间不在正确。
问题原因:在数据库中使用的是java.sql.Date的数据类型,而在前端用户进行输入的时候输入的也许是String类型的数据,也许是java.util.Date包下的Date数据类型,造成了这种前端输入的后端无法正常保存的现象。
问题的解决:
解决方案一:
我们的系统是让用户输入一个String类型的数据,但规定输入时的格式。然后使用的一个小函数解决的问题。
public static Date stringToDate(String s){
try {
java.util.Date theDate=new SimpleDateFormat("yyyy-MM-dd").parse(s);
java.sql.Date date=new java.sql.Date(theDate.getTime());
return date;
} catch (ParseException e) {
return null;
}
}
解决方案二:
这是一种不太合理的解决方案,但可以解决这个问题。就是将数据库中的数据的数据类型改成'char'型设置好使用的长度。这样的话就可以将数据直接存储进去,保证的数据正确性。但缺点是这样的设计在后期使用或者进行一些其他操作的时候会十分的麻烦。
问题二:jsp页面输入的中文无法正确的传递
问题描述:在前端jsp页面上用户输入的是中文字符,到数据库内就无法正常的存储。
问题原因:在jsp传递的时候是将输入的字符都解析成ISO-8859-1的格式进行的传递,在java后台对数据进行处理的时候并没有将编码自动改变为UTF-8或者GBK的格式,导致像数据库内传递的时候导致数据库内存的内容是以乱码的形式出现的。
解决方案:
解决方法其实很简单,既然是因为在JAVA后台获取的时候就没有获取到正确的中文格式,那就在JAVA后台页面上去改进。
public class AddStudent extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");//这两句就是控制字符的格式的语句
response.setCharacterEncoding("utf-8");//这两句就是控制字符的格式的语句
String userId = request.getParameter("id");
String username = request.getParameter("name");
}
}
因为我使用了JAVAServlt所以我的控制编码是在Servlt内写的,加上这两句内容就可以解决中文字符的传递问题了。