java异常总结

1.No row with the given identifier exists 解决方法

有两张表,ab.产生此问题的原因就是a里做了关联<one-to-one>或者<many-to-one unique="true">(特殊的多对一映射,实际就是一对一)来关联b.hibernate查找的时候,b里的数据没有与a相匹配的,这样就会报No row with the given identifier exists这个错.(一句话,就是数据的问题!)

     
假如说,a里有自身的主键id1,还有b的主键id2,这两个字段.

     
如果hibenrate设置的单项关联,即使a中的id2null,bid2中有值,查询都不会出错.但是如果a中的id2字段有值,但是这个值在b中主键值里并没有,就会报上面的错!

     
如果hibernate是双向关联,那么a中的id2null,但是b中如果有值,就会报这个错.这种情况目前的解决办法就是改成单项关联,或者把不对应的数据改对!

hibernate的查询有很多,Query,find,Criteria,get,load

query
使用hsql语句,可以设置参数是常用的一种方式

criteria
的方式,尽量避免了写hql语句,看起来更面向对象了。

find
方式,这种方式已经被新的hibernate丢弃

get
load方式是根据id取得一个记录
下边详细说一下getload的不同,因为有些时候为了对比也会把find加进来。

1
,从返回结果上对比:
load
方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常
get
方法检索不到的话会返回null

2
,从检索执行机制上对比:
get
方法和find方法都是直接从数据库中检索
load方法的执行则比较复杂
1,
首先查找sessionpersistent Context中是否有缓存,如果有则直接返回
2,
如果没有则判断是否是lazy,如果不是直接访问数据库检索,查到记录返回,查不到抛出异常
3,
如果是lazy则需要建立代理对象,对象的initialized属性为falsetarget属性为null
4,
在访问获得的代理对象的属性时,检索数据库,如果找到记录则把该记录的对象复制到代理对象的target
上,并将initialized=true,如果找不到就抛出异常

 

自关联一对多的时候。在many-to-one里面添加not-found=ignore

2.struts的异常处理

A.内部处理异理<Exception key=”资源文件里面的key” type=”异常处理类”>

例如<Exception key=”error” type=”java.lang.RuntimeEcxeption” scope=”request”(异常文件存入request)>

在程序中throws异常

B.全局异常处理

自定义异常类继承RuntimeException获得异常对象,实现父类的所以构造器,对其传入的参数设置getter方法

自定义异常处理类Handler继承org.apache.struts.action.ExceptionHandler;

复写execute方法,用来捕获异常,放到sessionrequest

编程式异常:在程序中自己捕获异常,跳转到异常页面

LOG4J日志管理

三大概念

Logger—使用这个对象来进行输出

Appender—使用这个对象来定义输出到哪里去

Layout—使用这个对象来定义输出格式

LOG4J的级别(level)

debug<info<warn<error<fatal

jsp文本域read-only不能改,但后台可以得到

如果设成disabled的话,后台的不到其值

 

3.程序代码出现cannot be resolved.

出現以上訊息的原因是因為你裝了多個版本的jrejdk的關係。本來Eclipse在建立專案時,會自動參照你的jre路徑,但多個版本就沒辦法了。
你只能手動建立

1.
進入
window\preferences\java\Installed JREs
1)
Add
2)
輸入JRE Name,
JDK1.5.0.03
3)JRE home directory,
選擇安裝的路徑

4)
OK
2.
進入
Project\properties\Java Bulid Path
1)Add library
2)
JRE System Library後按
Next
3)
workplace default JRE後按finish...

4.Hibernian映射关系

实体类class映射---成表

普通属性property映射成表字段

5.数据库编码设置

修改整个数据库服务器

my.cf文件的[mysqld]段设置:
default-character-set=utf8

单独设置某个数据库:
alter database testdb character set utf8;
查看mysql支持的编码:
show character set;

6.struts的异常处理机制

编程式异常

7.freemarker遇见的异

8.DAO

业务逻辑层处理对象之间的关系

Dao层尽量只跟单一的对象打交道,不要去维护对象之间的关系,这些关系交割manager层完成

8.出现按住ctrl键不进入源码解决

右键检出的项目,-->Properties-->Java Build Path-->Source-->删掉原有的src,在Add Folder中添加新的src-->Libaries中添加项目使用的所有jar包。
之后就可以了

你可能感兴趣的:(JAVA异常)