-
Spring
访问数据库异常的处理方法
来源
:
Javaeye
博客
发布时间
: 2011-01-22 20:45
阅读
: 134
次
原文链接
全屏阅读
[
收藏
]
编辑点评:
天我们将谈谈
Spring
访问数据库异常的处理方法,使用
J
DBC API
时,很多操作都要声明抛
出
eption
异常,通常情况下是要制定异常处理策略。
使用
JDBC API
时,很多操作都
要声明抛出
eption
异常,通常情况
下是要制定异常处理策略。
而
Spring
< br>的
JDBC
模块为我们提供了一套异常处理机制,
这套
异常系统的基类是
DataAccess
Exception
,它是
RuntimeException
的一种类型,那么
就不用强制去捕捉异常了,
< br>Spring
的异常体系如下:
p>
目前为止我们还没有明确地处理
Spring
中
JDBC
模块的异常。
要理解它的
异常处理机
制,我们来做几个测试。看下面的测试代码:
1.
public
void
insert(
final
Vehicle
vehicle) {
2. String sql =
3.
(ID,PLATE,CHASSIS,COLOR,WHEEL,SEAT) values
4. (:id,:plate,:chassis,:color,:whee
l,:seat)
5. SqlParameterSource
parameterSource =
new
BeanPropert
ySqlParameterSource(
6. vehicle);
7.
getSimpleJdbcTemplate().update(sql,
parameterSourc
e);
8. }
9.
public
void
insert(
final
Vehicle
vehicle) {
10. String sql =
IS,COLOR,WHEEL,SEAT)
11.
values(:id,:plate,:chassis,:color,:wheel,:seat)
12. SqlParameterSource
parameterSource =
new
BeanPro
pertySqlParameterSource(
13. vehicle);
14.
getSimpleJdbcTemplate().update(sql,
parameterSou
rce);
15.
}
public
static
void
main(String[] args) {
ApplicationContext ctx =
new
ClassPathXmlApplicationC
ontext(
VehicleDAO vehicleDAO = (VehicleDAO)
n(
icleDAO
Vehicle
vehicle =
new
Vehicle(
辽
B-000000
01
(1);
(vehicle);
}
public
static
void
main(String[] args) {
ApplicationContext ctx =
new
ClassPathXmlApplicationC
ontext(
VehicleDAO vehicleDAO = (VehicleDAO)
n(
icleDAO
Vehicle
vehicle =
new
Vehicle(
辽
B-000000
01
(1);
(vehicle);
}
修改
SQL
语句,不使用自增主键的特
性,并在这里设置重复的主键,那么运行程序,
就会报出字段重复的异常。下面来捕捉这
个异常:
1.
try
{
2.
(vehicle);
3. }
catch
(DataAccessException
e) {
4. SQLException sqle
= (SQLException) se();
5. n(
e());
6. n(
());
7. }
8.
try
{
9.
(vehicle);
10. }
catch
(DataAccessException
e) {
11. SQLException
sqle = (SQLException) se
();
12.
n(
rrorCode());
13.
n(
LState());
14.
}
此
时,我们就可以获得错误码和
SQL
状态(不同的数据库系统会
有不同):
关于
HSQL
数据库的错误码可以到
类中查看,只要注意运行结果
会有一个负号,
而类中定义的是没有负号的。
这
样就知道了这个错误的具体含义,
比如
104
< br>:
唯一约束验证失败。这就是我们故意设置的重复主键问题。
Spring
的
JDBC
模块为我们预定义了一些错误代码,它存
储在
t
包下的
文件中,其中描述
HSQL
的内容为:
1. bean id=
class
< br>=
SQLErrorCodes
2.
property name=
3. valueHSQL
Database Engine/value
4.
/property
5. property
name=
6. value-22,-28/value
7. /property
8. property name=
9.
value-104/value
10.
/property
11. property
name=
12. value-9/value
13. /property
14. property name=
15.
value-80/value
16. /property
17. /bean
18.
bean id=
class
=
orC
odes
19. property
name=
20. valueHSQL
Database Engine/value
21.
/property
22. property
name=
23.
value-22,-28/value
24.
/property
25. property
name=
26. value-104/value
27. /property
28. property name=
29.
value-9/value
30. /property
31. property name=
32. value-80/value
33.
/property
34. /bean
其余数据库的错误码内容也可以从
这个文件之中获得。
下面我们来看看如何自定义异常
处理。上面
我们已经知道在
t
包下有
文件,
在
Spring
启动
时会自动读取这个文件中的错误码,
它为我们
预分类了一些错误
码,而我们可以加强它,来使用我们自定义的异常。
首先,定义一个异常
类,我们就来自定义一下前面的
-104
错误,就是<
/p>
HSQL
的重复键的问题:
1.
package
ion;
2.
import
tegrityViolationEx
ception;
3.
public
class
VehicleDuplicateKeyException
extends
4. DataIntegrityViolationException {
5.
public
VehicleDuplicateKeyException(String msg) {
6.
super
(msg);
7. }
8.
public
VehicleDuplicateKeyException(String msg,
Thro
wable cause) {
9.
super
(msg,
cause);
10. }
11. }
12.
package
ion;
13.
import
tegrityViolationE
xception;
14.
public
class
VehicleDuplicateKeyException
extends
15.
DataIntegrityViolationException {
16.
public
VehicleDuplicateKeyException(String msg) {
17.
super
(msg);
18. }
19.
public
VehicleDuplicateKeyException(String msg,
Thr
owable cause) {
20.
super
(msg, cause);
-
-
-
-
-
-
-
-
-
上一篇:装运通知
下一篇:基于RN8302的数字化三相多功能电力仪表设计