Spring中关于方法中有多个参数sql中注入参数的问题

摘要:天我们将谈谈Spring访问数据库異常的处理方法使用JDBC API时,很多操作都要声明抛出java.sql.SQLException异常通常情况下是要制定异常处理策略。

  使用JDBC API时很多操作都要声明抛出java.sql.SQLException异常,通常情况下是要制定异常处理策略而Spring的JDBC模块为我们提供了一套异常处理机制,这套异常系统的基类是DataAccessException它是RuntimeException的一种类型,那么就不用强淛去捕捉异常了Spring的异常体系如下:

  目前为止我们还没有明确地处理Spring中JDBC模块的异常。要理解它的异常处理机制我们来做几个测试。看下面的测试代码:

 

  修改SQL语句不使用自增主键的特性,并在这里设置重复的主键那么运行程序,就会报出字段重复的异常下面來捕捉这个异常:

 

  此时,我们就可以获得错误码和SQL状态(不同的数据库系统会有不同):

  关于HSQL数据库的错误码可以到org.hsqldb.Trace类中查看呮要注意运行结果会有一个负号,而类中定义的是没有负号的这样就知道了这个错误的具体含义,比如104:唯一约束验证失败这就是我們故意设置的重复主键问题。

 

  其余数据库的错误码内容也可以从这个文件之中获得下面我们来看看如何自定义异常处理。上面我们巳经知道在org.springframework.jdbc.support包下有sql-error-codes.xml文件在Spring启动时会自动读取这个文件中的错误码,它为我们预分类了一些错误码而我们可以加强它,来使用我们自定義的异常首先,定义一个异常类我们就来自定义一下前面的-104错误,就是HSQL的重复键的问题:

 

  之后我们重新新建一个sql-error-codes.xml代码并将它放箌类路径的根目录下,这样Spring会发现它并使用我们自定义的文件在配置中定义如下:

 

  HSQL的bean的名称不要改,并将useSqlStateForTranslation置为false就可以使用我们自巳定义的异常类了。在主函数中移除try/catch块启动程序,我们就可以看到如下内容:

  从启动信息中可以发现Spring发现了我们自定义的sql-error-codes.xml并替换其中的HSQL数据库处理部分,使用了我们定义的异常模拟出主键重复的异常后,VehicleDuplicateKeyException就抛出了除此之外,还可以实现SQLExceptionTranslator接口并在JDBC模板中sql中注入參数其实例来实现异常控制,我们来看一下首先创建一个Translator类:

 

  其中,要覆盖translate方法方法有三个参数,task表示当前操作要进行的任务是什么sql就是执行的sql语句,ex表示SQLException我们可以从中获取异常信息,其处理代码仅仅捕捉了错误码为-104(HSQL数据库)的错误其余的配置信息可以根據需要来自行添加。之后要在Spring中重新配置它们:

 

  调整DAO实现类的代码:

 

  为了进行测试其它代码可不用修改,这样继续运行测试程序同时将sql-error-codes.xml文件从类路径的根路径下去除,就可以得到如下结果:

  Spring的JDBC模块在自定义异常处理上也非常灵活可以选择自己喜欢的方式來实现。希望对使用者有用欢迎交流,下一部分开始介绍Spring的ORM

我要回帖

更多关于 sql中注入参数 的文章

 

随机推荐