JAVA开发中遇到的问题和异常.docx
- 文档编号:4341076
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:12
- 大小:25.16KB
JAVA开发中遇到的问题和异常.docx
《JAVA开发中遇到的问题和异常.docx》由会员分享,可在线阅读,更多相关《JAVA开发中遇到的问题和异常.docx(12页珍藏版)》请在冰豆网上搜索。
JAVA开发中遇到的问题和异常
========================================J2SE=======================================
1.形参中有可变数组参数时,可以直接在实参中,用逗号隔开来写上多个。
如voidfindUniqueResult(Stringhql,Object[]values){}
("fromVocationwherename=andid=","保3",
(2));
2.一个Object[]的数组中可以同时存放各种类型,如String,Long
3.如果要对boolean的属性使用EL表达式,要将其isXX()方法改成,getXXX();
4.如何获取date的下一天?
先newCaledar的子类实例。
调用实例的(date)的方法将date转换成calendar类型.
调用,1);获取当前日历的下一天
调用();再将calendar转换成date类型。
5.比较list集合中是否有指定对象obj出错。
问题描述:
list中明明有一个对象与obj完全一样,但是调用(obj)
方法始终返回false,for遍历这个集合中的对象与obj比较,是有一个对象与obj
相等的。
错误的原因:
这个obj对象重写了hashcode与equals方法,去掉就可以了。
并且集合的比较要用equals。
6.set<>可以用增强for来循环输出吗可以的,只不过输出的顺序与保存的顺序是不相同的。
========================================J2EE=======================================
gramarconstraints(XSDorDTDSchema)detectedforthedocument警告
2.在JSTL标签中使用EL表达式获取服务器传来的数据与页面数据比较时,要将页面中的数据放到${}内,放在外面不能比较。
正确的写法是:
${>5}
3.如何在jsp页面中获取当前action路径。
1)${}获取到的是跳转后的jsp的路径。
2)是在js中获取请求路径
3)<%=("referer")%>可以获得action请求的完整路径,而不是当前地址栏的路径。
只是怎么通过EL表达式来取有参数的值呢?
${header['Referer']}
4)<%=basePath%>获得的是项目的路径
====前面的错误在于获取到的并不是当前地址栏中的路径
解决方法:
在action中获取到请求的uri,getRequest().getRequestURI(),再传递到页面中去。
4. iftest="${2>1} ">123
if>表达式写正确了,但是结果不正确怎么回事错误的原因在于test属性值的EL表达式后面多了空格,去掉就可以了。
中进行文件上传时,只能用post的方式提交类型为multi-part/form的数据。
6.文件上传格式拦截器的配置:
image/bmp,image/png,image/gif,image/jpeg
7.页面中判断集合是否为空时,不需要用fn:
length,可以用${emptylist}
========================================SSH=======================================
spring
报空指针异常。
错误是因为new的Dao实例,进行调用,以至于出现Dao中注入的Sessionfactory空指针。
使用spring的注入时,要先对需要注入的对象添加声明,再注入,注入的属性要提供setter方法。
2.业务基类报空指针异常的问题:
有几种可能性
1)没有为具体的业务的set方法中注入基类的属性。
2)@Autowired添加到了属性上,应该添加到get()方法上,否则父类没法注入。
3..明明已经删除的类,却报spring的注入引用为空?
--处理方法,将项目删除再重新导入就可以。
至于为什么会这样,还没想到。
4.已经打开了OSIV,还有报延迟加载异常?
--处理方法,设置lazy="false"。
hibernate3的默认的lazy="true"。
推测在哪加上,就在对应的这端起作用。
要想在另一端起作用,还得另外再添加。
测试所得,这样也不会影响load()方法的使用。
也有可能这样做只是把延迟加载关闭了,OSIV仍然没有直到作用。
必须是全部纳入spring管理,openSessionInviewFilter才能起作用是这样吗
6.使用定时任务调度器:
方法中只有一行结果,但是执行了两次,为什么?
因为配了两个定时任务调度的配置文件,二者都在做相同的事情,会互相影响。
7.缓存配置文件中的声明文档?
DOCTYPE hibernate-configurationPUBLIC
"-session管理的对象用saveOrUpdate(),脱管状态的才用update()?
9.不能在test当中获取打开OSIV可以获取到的对象必须经过请求才能获取
注入SessionFactory的空指针异常。
异常描述:
自己的错误在于,new的Dao实例,进行调用,以至于出现Dao中注入的Sessionfactory空指针。
在hibernate+spring配置过程中,应注意几点:
1)不能直接new一个DAO的实例,而应该通过spring的配置文件自动初始化sessionbean,然后再通过spring得到该DAO的引用,否则在调用getHibernateTemplate()时,会获得一个null的空指针异常。
2)在DAO的sql语句中,from后面的应该是POJObean的类名,而不是数据库的表名。
也就是说,在引入spring的ioc时,所有的bean都在里面统一管理配置。
在action里获得的那个dao并不是从spring的bean管理中()获得的,因此也就没有获得象datasource等资源,改正办法,在action里注入dao的引用就可以了。
Spring不是执行时通过进行配置的,是在启动服务时就配好了的,所以在执行时只需调用注入进来的,如果这时候再new一个对象,是不会出错,只不过这个对象不是Spring注入进来的对象,所以在获得SessionFactory时抛出空指针。
Hibernate
语句正确,但是不往数据库中添加怎么回事?
1)事务没有提交!
2)选项将自动生成数据库模式(schema)-直接加入数据库中。
2.为什么user_hobby表不报没有主键的警告因只写了单向关联,没有写双向关联。
user_hobby中为什么不报没有主键的错误,反而有两个主键。
参考建表语句。
是因为用的是set吗可是这有什么关系?
--错误的原因在于primarykey(user_id,hobby_id)不是指两个主键,而是指联合主键。
可能因为用的set不能有重复记录,生成了联合主键,来控制中间表的不重复。
Unsupportedcascadestyle:
true:
有误写了cascade="true"的属性--Portrait的配置文件中
4.Location中的关联属性的名字与配置文件中不相同
5.乐观锁版本号,不可以是Long型的。
因为数据库中默认的是int类型。
6.一对多关联中,如果在配置了cascade="save-update"时,就算没有set一端的引用,也会
先往多端的数据库中发起一条insert语句,再保存本身错误的原因在于,实体关联中new了对象。
7.为什么要在一端配置cascade="delete",因为不这样做的话,当有外键引用自本条记录时,这条记录是删不掉的。
8.根据Long型的id去获取记录时,需要显示进行类型转换,否则会报错。
如(3)。
9.保存一对多关系时,要先将获取到一端的对象,再去添加,这样会影响执行效率的。
--错误的原因在于使用了立即获取对象,应该用load()去延迟加载,返回代理对象Id。
10.怎么实现多对多的关联查询?
--解决方法,不要用两个一对多,直接用
不再需要cascade了,这样delete与update、add需要自己手动去控制。
lazy默认是true,即延时加载
many-to-manylazy默认是true,即延时加载
many-to-onelazy默认是false,即时加载
补充一点,你的lazy之所以没有“TRUE”可以选,那是因为你的lazy应用对象是普通类型字段(String)而非集合类。
普通字段的lazy就是这样的,proxy表示用jdk动态代理实现lazy=true,no-proxy表示用cglib的类增强方式代理实现lazy=true。
,
普通字段
12.在test类中获取load对象获取不到。
--错误的原因在于使用了已经关闭的session。
要获取load对象,需要在受session管理的范围中。
13.使用多个配置文件不起作用。
错误的原因在于路径不对,不要写成. ,应该写成
14.延迟加载错误的原因在于在两个请求当中去使用了session,只能在同一个session,OSIV为每请求分配了一个
session,只能在同一个中去使用。
如果一定要用,可以先将原来的对象变成持久化对象,懒加载上来,再去加载。
开启后可以级联很多个,如
16.HQL中也可以通过关联对象的id来查询对象,如fromStudentwhereuser_id=(Student中的是User).
推测可能是HQL中的字段使用数据库中的和对象中的都可以,只不过,对象中的HQL会自动转成 对象.字段名,where< anduser_id=?
而写成数据库字段名时会直接显示 wherestart_time< anduser_id=
15.如何执行HQL的多表关联查询?
FORMarticle,type WHERE="
这里是你type表里面栏目的id,对应你article表里面的Article_Type。
16.如何在多表关联查询中添加条件。
1)自己写SQL语句:
fromAaleftjoinbwhere=?
17.多对多关联实现分页查询时,要注意:
1)写参数时一定要主动进行类型转换:
如
(1)
2)注意多对多查询总记录时不能用count(*),因为多对多查询出来的结果可以是各种各样的。
18.多对多查询的排序和分页不能同时实现?
"selectfriendsfromUserasuserleftjoinasfriendswhere=orderbydesc";排
序与分页是可以同时实现的。
19.分页标签中使用组合查询时,每次点击上、下页之后就会自动变成查询所有的分页。
根据推测是跳转路径出错,解决办法是从action中传递一个请求过来。
put2ActionContext("uri",getRequest().getRequestURI());
20.往多对多关联表的中间表中插入数据时,要用insertintorel_u2fvalues(2,1);直接插入;
不能指定表的字段名,否则会报引用了两个外键的错误。
21.使用组合查询要注意:
1)拼sql语句,sb="...where1=1"
拼可变条件参数:
List
2)追加("andnamelike")moveService已经添加自动注入,并且提供了getter/setter方法,执行到userService时报空指针异常。
原因:
创建表时外键名与原有的重复,没创建上。
另一个重要的原因是没在set方法中添加setBaseDao。
23.有一个已知对象user,是从session中取到的,如果要用user的普通属性直接
调用如()就可以了,但是如果要用到user中的集合属性,比如说
(),则需要先调用())为这个user开启一个session才能使用。
by:
Positionbeyondnumber
ofdeclaredordinalparameters.Rememberthatordinalparametersare
1-based!
Position:
1
问题:
多了hql参数
会将解释不了的hql语句,原封不动地转成sql语句,所以sql语句中能用的语句在hql中都是可以使用的。
中设置默认值:
在配置文件的属性中添加Not-Null='true'
27.组件类需要提供toString()方法来测试吗组件的增加,删除hibernate是怎么去实现的?
28.组件映射中class=""一定要指定吗?
29.外键名的指定应该在引用端,而不是在被引用端。
30.多对多关联中,两个外键名注意不要取成一样的。
31.在POJO类中添加Hibernate的映射关系时,关联的对象的引用是不需要new出来的。
32.HQL中很多用户发现使用完全大写的关键字会使查询语句的可读性更强,但我们发现,当把查询语句嵌入到Java语句中的时候使用大写关键字比较难看。
33.如果有很多类中需要用到相同的方法名,可以先写一个基类,再通过重写方法来实现。
34.
注意:
重要提示: 如果一对多关联中的外键字段定义成notnull,你改成把 not-null="true",或者使用双向关联,并标明inverse="true". 35.将好友改成密友时需要在密友_用户表中添加关联,还要在好友_用户中移除关联。 36.组件映射: 组件元素的非空问题 37.写实体类时最好先写普通属性,重写完hashCode(),equals(),toString()方法之后再添加关联属性。 38.级联保存数据的时候,为什么多对多的set中,调用了(hobbySet)只会保存set中的第一行数据 39.多对多中间表的删除需要那么复杂吗? 40.对多对多关联的维护,设置了inverse之后,就只能对中间类进行维护,而不能只维护一端了吗 41.当有互相关联的时候,初始化数据的先后顺序是怎么样的只能通过更改去实现是吗 42.有一个查询中,如果不输入分类,就会出错,需要添加条件判断一下。 Struts 中怎么配置从一个action跳转到另一个action? @Result(name="postSucc",location="/bbs/id=${id}",type="redirect")} 配置的action中有包名时,配置说Therequestedresource(/jshou/mng/remind/isnotavailable. 错误的原因在于没有在Action前面加上spring的注解。 3.关于struts2的配置。 namespace有开始/,没有结束/,action中没有前后/ 4.使用struts2时,如果JSP页面中有date类型的字段,那么需要添加日期转换器,否则容易出现找不到action的错误。 的两个action之间怎么传递参数? 直接用OGNL表达式,在action的路径后面加上id=${#id} 这里一定要加#吗 hasdetectedanunhandledexception: 错误导致HQL语句的参数设置不上,原因在于参数的类型不匹配,比如用的id为Long型的。 设置参数时设置成setParam(0,1)这样就会报上面的异常。 还有hql的参数下标是从0开始的。 7.执行到action,但是返回时总不跳转指定的result页面,并且参数也获取不到。 传递参数时少写了$,应该写成id=${id} 8.struts2中自己写验证时要注意: 1)继承自ActionSupport类 2)命名规则: validate+方法名首字母大写 : 如 voidvalidateAdd(){} 3)通过("msg","错误信息提示");来阻止继续访问 5)在页面中通过 fieldErrorfieldName="msg"/>来获取 4)要为这个方法在struts配文件中置input参数 9.struts2中用拦截器来进行验证 10.struts2中用验证框架来验证 11.struts2中用过滤器来验证 12.更改密码时不起作用,其它都对。 原因: set的密码应该是原密码,而要修改的应该是新密码,这里容易混淆。 13.struts中动态显示下拉框中的内容 select.... optionsCollectionname="..." 可以通过if/else标签来判断,if中的表达式可以用函数来比较两个对象。 多出来的问题: EL中有equals方法吗显然没有。 中获取不到页面中传递过来的隐藏表单域的值? 原因在于不是在input元素当中,不能自动提交并获取,只有通过参数传递。 中的Token的使用方法? 1)在form表单之前添加 token/>; 2)在struts2的配置文件中添加token拦截器的配置,单独的name="token"的action。 3)配置正确,拦截器却不起作用? 原因在于,拦截器的action要放在其它action之前。 16.当路径正确,在地址栏中直接输入可以跳转到action里面的方法,通过form不进Action时,检查js与form元素的属性。 类中的getContext()中的put方法是怎么回事? 中可以用级联级联再级联来获取对象: 比如: 类中就可以通过().getId()来获取 配置文件中传递多个参数时,不有&隔开,用;隔开。 20.使用token有一个前提,就是表单必须使用html: form标签来完成。 另外struts2是用拦截器来实现的。 中实现去掉后缀及url重写的方法。 考虑: 页面中的form直接用struts标签可以吗? 22.当时是因为什么原因,要用uri来传递分页中的地址。 现在进行一对多查询时会报错但是突然又不报错了报错的原因在于将参数uri写成了url。 中的使用OSIV加载配置文件时,要将hibernate..OSIV,改成hibernate3.。 24.为什么FriendAction中没有添加Spring的注解也可以运行到底在Action中添加注解是做什么用的 并没有地方需要通过注解来调用到Action? 25.如何防止表单的重复提交 Token ========================================Server======================================= ========================================数据库======================================= 1. MySQL>select* fromrel_u2f;ERROR1064(42000) --错误的原因在于sql语句中有空格,去掉空格即可。 2.数据库的命令行出现中文乱码的问题? 中的中文不能按照首字母的顺序来排序,是按一种树的顺序来排列的。 sql2005中: collateChinese_PRC_CI_AS,Chinese_PRC是按照中文排序。 参考 4.between包上不包下,也就是说,前面的你需要减一天,而后面的保持不变 比如要查询8号的,你就该查询between7and8 tableemp_hisasselect*fromempwhere1! =1; 这是创建一个和EMP表的备份表但它只有EMP表的结构里面的数据为空: createtableemp_hisasselect*fromempwhere1=1; 这才是创建EMP表的备份表 中执行批量更新: Stringhqlupdate="updateUsersetname=: newName"; intupdateEntities=(hqlupdate) .setString("newName","我不是一个人") .executeUpdate(); 中如何计算时间差? SELECTTIMESTAMPDIFF(MINUTE,'2010-04-2317: 53: 38','2010-04-2215: 49: 43'); 计算时间差格式化时间? fromCalendarwhereTIMESTAMPDIFF(MINUTE,'"+temp+"',startTime)<0 temp表示的是当前时间,这句hql语句指查询出大于当前时间的日程。 为int类型,如果添加时不指定,保存到数据库中的是0还是null--数据库默认值问题。 9.表中字段没有添加notnull,unique约束。 10.表中哪些字段需要设定初始值。 11.保存到数据库中的date的类型没有指定。 timestamp? 12.并不是所有的数据库中取出来的数据都需要单独添加超链接去查看,可以在存储数据的时候就写好。 如content=' ========================================I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 开发 遇到 问题 异常