问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

org.springframework.jdbc.uncategorizedsqlexception怎么解决

发布网友 发布时间:2022-04-09 18:33

我来回答

3个回答

懂视网 时间:2022-04-09 22:54

Spring JDBC模板类—org.springframework.jdbc.core.JdbcTemplate

博客分类:  
  • spring
  • JDBCSpringSQL编程数据结构 

    今天看了下Spring的源码——关于JDBC的"薄"封装,Spring 用一个Spring JDBC模板类来封装了繁琐的JDBC操作。下面仔细讲解一下Spring JDBC框架。

    一、首先看一下为什么要对JDBC进行封装?

       传统的JDBC API实现比较底层,不管用户执行一个复杂的数据库操作还是一个简单的数据库查询操作,都有一个模板可以使用:捕获或抛出异常—获取连接—创建Statement或PreparedStatement—执行数据库操作—获取结果(ResultSet)—其他操作—处理异常—关闭ResultSet—关闭Statement或PreparedStatement—关闭连接。这样的重复操作会让人比较有结构感的同时也消耗了大量的时间。既然所有的数据库操作都可以引用这一模板。那Spring就对JDBC API进行了一层"薄"封装,让程序员脱离繁琐的结构而只编写各个数据库操作程序中的核心部分:CRUD。通过在配置文件中配置数据源来获取连接。这样就减少了那些在传统JDBC编程中的重复编程,让这部分重复交由Spring JDBC容器来处理。

    二、Spring JDBC封装是怎样的?

     Spring JDBC是提供了一个数据库操作的模板类JdbcTemplate来进行封装的。org.springframework.jdbc.core.JdbcTemplate extends JdbcAccessor implements JdbcOperations 。下面我们来具体看一下这个封装类:

    1、JdbcAccessor 是一个抽象类,实现了InitializingBean接口。InitializingBean接口实现了对BeanFactory中的所有属性设置后的响应。JdbcAccessor实现InitializingBean的唯一方法afterPropertiesSet来对设置数据源和其他的日志信息和异常信息和是否是LazyInit(懒加载)。

    2、JdbcOperations是一个接口。这个接口定义了一个JDBC操作的集合,多数用回调来对操作进行定义。下面就是其中的方法定义,基本上也可以作为SpringJDBC的文档进行阅读。

     

    操作 JdbcOperations 方法定义 
    处理简单连接Connection Object execute(ConnectionCallback action)
    处理静态查询Statement

    Object execute(StatementCallback action)

    void execute(String sql)

    Object query(String sql, ResultSetExtractor rse)

    void query(String sql, RowCallbackHandler rch)

    List query(String sql, RowMapper rowMapper)

    Object queryForObject(String sql, RowMapper rowMapper)

    Object queryForObject(String sql, Class requiredType)

    Map queryForMap(String sql)

    long queryForLong(String sql)

    int queryForInt(String sql)

    List queryForList(String sql, Class elementType)

    List queryForList(String sql)

    SqlRowSet queryForRowSet(String sql)

    int update(String sql)

    int[] batchUpdate(String[] sql)

    处理PreparedStatement

    Object execute(PreparedStatementCreator psc, PreparedStatementCallback action)

    Object execute(String sql, PreparedStatementCallback action)

    Object query(PreparedStatementCreator psc, ResultSetExtractor rse)

    Object query(String sql, PreparedStatementSetter pss, ResultSetExtractor rse)

    Object query(String sql, Object[] args, int[] argTypes, ResultSetExtractor rse)

    Object query(String sql, Object[] args, ResultSetExtractor rse)

    void query(PreparedStatementCreator psc, RowCallbackHandler rch)

    void query(String sql, PreparedStatementSetter pss, RowCallbackHandler rch)

    void query(String sql, Object[] args, int[] argTypes, RowCallbackHandler rch)

    void query(String sql, Object[] args, RowCallbackHandler rch)

    List query(PreparedStatementCreator psc, RowMapper rowMapper)

    List query(String sql, PreparedStatementSetter pss, RowMapper rowMapper)

    List query(String sql, Object[] args, int[] argTypes, RowMapper rowMapper)

    List query(String sql, Object[] args, RowMapper rowMapper)

    Object queryForObject(String sql, Object[] args, int[] argTypes, RowMapper rowMapper)

    Object queryForObject(String sql, Object[] args, RowMapper rowMapper)

    Object queryForObject(String sql, Object[] args, int[] argTypes, Class requiredType)

    Object queryForObject(String sql, Object[] args, Class requiredType)

    Map queryForMap(String sql, Object[] args, int[] argTypes)

    Map queryForMap(String sql, Object[] args)

    long queryForLong(String sql, Object[] args, int[] argTypes)

    long queryForLong(String sql, Object[] args)

    int queryForInt(String sql, Object[] args, int[] argTypes)

    int queryForInt(String sql, Object[] args)

    List queryForList(String sql, Object[] args, int[] argTypes, Class elementType)

    List queryForList(String sql, Object[] args, Class elementType)

    List queryForList(String sql, Object[] args, int[] argTypes)

    List queryForList(String sql, Object[] args)

    SqlRowSet queryForRowSet(String sql, Object[] args, int[] argTypes)

    SqlRowSet queryForRowSet(String sql, Object[] args)

    int update(PreparedStatementCreator psc, KeyHolder generatedKeyHolder)

    int update(String sql, PreparedStatementSetter pss)

    int update(String sql, Object[] args, int[] argTypes)

    int update(String sql, Object[] args)

    int[] batchUpdate(String sql, BatchPreparedStatementSetter pss)

    处理callable Statement

    Object execute(CallableStatementCreator csc, CallableStatementCallback action)

    Object execute(String callString, CallableStatementCallback action)

    Map call(CallableStatementCreator csc, List declaredParameters)

    上面的所有方法均throws DataAccessException;

    3、DataAccessException继承NestedRuntimeException,NestedRuntimeException继承RuntimeException,主要输出异常信息。异常类都不会自己实现太多的方法而是一般调用父类方法来进行实现,只是更细化相应信息的输出和传入相应参数到父类方法进行执行。

    4、大家可以看到上述方法很多是用回调来作为参数,而具体在JdbcTemplate中方法的实现还是利用传统的JDBC API中的Connection、Statement、PreparedStatement、ResultSet等类和相应的方法来进行实现回调。

    org.springframework-jdbc

    标签:tab   异常   简单   callback   调用   操作   category   operation   cto   

    热心网友 时间:2022-04-09 20:02

    SQL 查询语句异常,可能是你的查询语句写错了,或都你的映射的类和数据中的表不对应,检查你的映射配置文件。看异常信息,你持久层应该用的是Hibernate 检查一下你的hibernate 映射配置文件,或你的HQL语句。

    热心网友 时间:2022-04-09 21:20

    哎呀是spring jdbc框架哦 您在执行什么语句报的错误啊
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    在爱水APP哪个模块中可以填写个人信息,查询自己一天的饮水量? 黄金为什么是避险产品 避险买什么 避险品种是什么 避险产品什么意思 什么是避险产品 ...对联和我们平时使用的印章,说说使用了哪几个字体 对联上写的是什么字 ...有一空是让我评价我自己,请各位哥哥姐姐帮帮忙,帮我编一段,往好了... 艾灸用品哪种好 氢气球可以放车里吗 股票走势图 w m v都代表着什么意思谢谢 股票中34m是什么意思 如何处理快要扔掉的氢气球 是粗粮,可以减肥,是真的吗 氢气球不想玩了怎么安全处理啊,是密封的 金银粗粮饭的热量是多少? 什麼分M型走势与W型走势? 为什么粗粮比精粮热量低 我家地暖用的是日丰管,当时签了日丰管安装协议书,这就等同于售后服务协议书吗,售后日丰管厂家承保吗 地暖的公司怎样选择?地暖有什么优点? 各种粗粮的热量是多少 猴头菇的生长地是哪里? 《实用中医内科杂志》是核心期刊吗 为什么粗粮热量高还减肥 野生猴头菇为什么成对生长? 粗粮的营养含量更高,粗粮和细粮哪个热量更高呢? 地暖验收单 《中国实用医药》是非法出版物吗 地暖公司的选择公司 衡阳市南岳区现在口罩哪有卖呀? 卖氢气球,充完氢气球后,氢气罐子里的残渣可以倒河里吗? 大盘M型是向下是什么意思 氢气打的气球用什么方法可以保存的更久 氢气球发生爆炸,我们应该如何处理 黄山市屯溪区什么地方可以买到医用口罩? 安检的时候不要的气球及时报车站予以处理掉什么意思 灯塔市哪能买到医用口罩? 这个是海蓝宝吗 请问这是海蓝宝吗? 海蓝宝助学业吗? 海蓝宝? 这个是海蓝宝吗? 海蓝宝有关名字 海蓝宝是否有染色? 海蓝宝有矿胶吗 酱油污渍用什么方法可以洗净 宝宝快2岁了,说话不清楚,需要去看医生吗? 什么东西能洗清酱油渍? 旧酱油渍可以用什么清洗