问题1:Access denied for user 'root'@'localhost'
出现的原因:一开始用的是Navicat for MySQL来做的这个作业,网上说是权限问题,所以我在Navicat上按步骤做了对应的权限修改,不过还是无效,干脆就换成了MySQL Server 5.5,用cmd界面走了一趟一下流程:
cd C:\Program Files\MySQL\MySQL Server 5.5\bin
mysql -u root -p
(系统提示Enter password:)输入你的密码
(系统提示Welcome)
grant all privileges on *.* to 'root'@'localhost' identified by '(你的密码)';
(系统提示Query OK)
flush privileges;(如不刷新可能无法立即生效)
exit;(退出)
问题解决
https://blog.csdn.net/qq_36735409/article/details/78032144
问题2:Before start of result set
出现的原因:直接rs.getString()而没有在之前使用rs.next()
ResultSet返回的是一个列表,列表的指针默认是指向第一条记录前的位置,想要获取第一条(及以后)记录的内容就必须要使用rs.next()方法把指针往后移。基于当时的情况,ResultSet里只有一条记录,所以没有使用while(rs.next())和if(rs.next()),直接如下
rs.next(); if(rs.getString("adminname").isEmpty()){ //...... }
https://blog.csdn.net/killua_hzl/article/details/6073618
问题3:Unknown column 'admin' in 'where clause'
出现的原因:sql语句的格式存在问题
sql语句是"select * from admin where adminname= "+adminname;(String adminname)
就出现了此问题
将sql语句改为select * from admin where adminname= ' "+adminname+" ' ";
如果直接按红字写的话,假如adminname变量是个整形还好说,但如果是字符串的话则需要框在引号内
https://blog.csdn.net/fastkeeper/article/details/47783739
问题4:ResultSet是否为空的判断语句写法有误
做了一个登录方法,账号密码正确,返回true跳转成功页面,反之则返回false跳转失败页面。如果执行sql查找后resultset是空就直接返回false,不需要做后续密码判断
//先判断是否存在此账号再进行密码判断 sql = "select * from admin where adminname ='"+adminname+"'"; try { state = conn.createStatement(); rs = state.executeQuery(sql); if(rs == null){ //判断成功意味着不存在此adminname对应的数据 return false; } else{ //存在对应用户名的数据,则只需进行密码核对 rs.next(); if((rs.getString("password")).equalsIgnoreCase(password)){ //密码正确,返回true return true; } } return false;
出现原因:判断rs为空的写法有误,导致无论账号密码是否正确返回都是false
判断ResultSet的方法有很多,但rs == null这个绝对是大忌!
rs不管执行有没有记录的sql语句都不会是null,除非是以下情况
ResultSet rs = null; //后续没有任何的例如rs = state.executeQuery(sql);之类的操作
对于解决,我用了一种方法
if(rs.first()==false){ //返回false意味着不存在此adminname对应的数据 return false; }
rs.first()方法如图
注意:当用这种方法后光标已经在第一条记录上了,所以如果后续需要读取记录的效果是“从第一行到最后一行”,请单独把第一行给读取一遍再进行while(rs.next())遍历读取
问题5:不知道如何达到跳转页面后显示提示消息
出现原因:这个问题描述的有点抽象 ,大概意思就是想让页面跳转后在当前页面上再显示一段文字“XXXXX”,思路是先sendRedirect后再response.write("XXXXX")的一个思路,但是只能做到页面的跳转,却不会显示文字
解决办法:尚未解决,待编辑
https://www.cnblogs.com/dlexia/p/4653431.html
问题6:导入的js文件乱码
出现情况:把js在dreamweaver上写好后import进scripts文件夹后中文全部乱码
解决办法:把js的内容复制到txt文件中再在另存为内选择编码为utf8,把后缀名改为js后再导入进项目中
问题7:通过js判断输入框的内容是否为空时,应该注意的一点
出现情况:无,仅作提醒
解决办法:https://blog.csdn.net/zjdwhd/article/details/52904905
问题8:JS实现表单内容验证、阻止表单提交(onsubmit)
出现情况:没有使用onsubmit来阻止,导致非法数据还是提交了上去
https://blog.csdn.net/u010591939/article/details/46739177
问题9:el表达式如何获取url的参数?
出现情况:${sid }表达式没有获取到url内sid='...' 的参数
解决办法:https://blog.csdn.net/zoujian1993/article/details/75087553
首先要了解el表达式获取值的原理以及范围。
el表达式会从小到大去找寻相应的key,如果找到了就取相应的value
- 这个范围从小到大依次是pageContext、request、session、Application
- 取值的原理,这几个作用域都有一个相同的属性:attribute。都拥有setAttribute()和getAttribute()方法,el表达式取值就是从这里面取的
- 我们要取的数据是携带在url中的,而获取url中参数的方法是getParameter()。所以url中的参数并不能直接通过${name}的方式获取。
- 最后,el表示式获取url中参数的方法是:${param.name}
问题10:为什么在引入外部文件时js文件要放在最下面?
js文件放在底部原因很简单,因为浏览器在解析dom和渲染的时候是单线程,如果遇到js下载缓慢的情况,会造成页面阻塞,用户看不到页面的东西,造成不好的体验,一但js加载失败,那浏览器就会一直不停地加载,页面就一直显示不出来,放在底部的话,就算js加载缓慢或者加载不出来,但是因为css和其他html文档都加在完毕了,至少可以让用户看到完整的界面从而提高用户体验和性能。
问题11:execute(sql)三种执行方法的返回值表示的含义
- boolean execute(String sql)
返回:如果第一个结果为
ResultSet
对象,则返回true
;如果其为更新计数或者不存在任何结果,则返回false
- int executeUpdate(String sql)
返回:受(增删改)影响的行数
- ResultSet executeQuery(String sql)
返回:执行SQL查询,并返回ResultSet 对象
问题12: MVC设计模式的概述
![]()
问题13:MVC设计模式与SSH框架的爱恨情仇(?)
SSH是三个框架共用的缩写,是Struct+Spring+Hibernate的组合,所以SSH和MVC的关联要从三个点看
Struct框架
MVC三个部分互相有关联,耦合度高,Struct框架解耦了M层和V层,并且选择视图只需要返回视图的名称就可以了。
Spring框架
Spring的主要目的是为我们创建对象,我们无需再用new来创建对象,而是用spring来创建,它管理对象的整个生命周期,无需我们关心对象的创建和销毁。我们需要使用哪个类的对象,只需在配置文件中导入,并提供该对象的set方法。
Hibernate框架
在MVC模式中,人们把与数据库相关的操作从M层中分离出来,单独形成了Dao层,这样别的Model可以复用Dao。
Hibernate的目的不像struts一样是解耦,它的目的是在M层和Dao层之间的数据建立对应关系,我们不用再把实体对象拆开来放到数据表中,也不用把数据表中查询到的数据组装成实体对象,Hibernate替我们对数据表和实体对象建立了映射。
详细的SSH细节在这个文章有讲
https://www.cnblogs.com/laibin/p/5847111.html