Spring源码学习笔记(13)——JDBC Spring提供了JdbcTemplate模板类来操作数据库,JdbcTemplate是对原生JDBC进行了全面的封装,统一处理了数据库连接的获取与释放等操作...一. execute()方法 从简单更新语句入手 使用JdbcTemplate的update()方法可以进行数据库的更新操作,源码如下: public int update(String sql,...execute()的实现如下: public T execute(PreparedStatementCreator psc, PreparedStatementCallback action...处理异常警告 protected void handleWarnings(Statement stmt) throws SQLException { //当设置为忽略警告时,只尝试打印日志...定义了SQLWarning类描述数据库警告,警告的意思是数据发生了某种错误,但是并不会影响程序的正常执行,因此只是对警告进行打印日志,并没有抛出异常。
三、处理特定异常 如果我们不想显示统一的“服务器内部错误”,需要个性化的显示异常信息,那么需要针对特定的异常做处理 1、添加依赖 在guigu-common中添加jdbc依赖 org.springframework spring-jdbc 2...return R.setResult(ResponseEnum.BAD_SQL_GRAMMAR_ERROR); } 3、测试 问题:上面的例子虽然针对特定的异常显示个性化的错误信息,但是你会发现,针对每个不同的异常我们都需要在项目中添加对应的处理方法..."); } else { return R.error().message("保存失败"); } } 4、测试 测试 结果 五、异常处理优化 目标:以优雅的 Assert...我们可以在控制台日志中查看具体的错误原因。前端只需要返回相对简单友好的提示即可。
对源码分析前,我希望先介绍一下Spring中数据访问的相关内容,然后层层递进到事物的源码分析,主要分为两个部分 JdbcTemplate使用及源码分析 Mybatis的基本使用及Spring对Mybatis...运行后数据库中确实插入了一条数据 对于JdbcTemplate的简单使用,建议大家还是要有一定熟悉,虽然我现在在项目中不会直接使用JdbcTemplate的API。...语句的封装后,直接调用了execute方法 // execute方法是jdbcTemplate的基本API,不管是查询、更新还是保存 // 最终都会进入到这个方法中 return...3、执行Sql 没啥好说的,底层其实就是调用了jdbc的一系列API 4、处理警告 也没啥好说的,处理Statement中的警告信息 protected void handleWarnings(Statement...,通过这篇文章是希望让大家对Spring中的数据访问有一定了解,相当于热身吧,后面的文章难度会加大,下篇文章我们将介绍更高级的数据访问,myBatis的使用以及基本原理、事务管理以及它跟Spring的整合原理
初入学习 JDBC 操作数据库,想必大家都写过下面的代码: 数据库为:H2 ? 如果需要处理特定 SQL 异常,比如 SQL 语句错误,这个时候我们应该怎么办?...使用 Spring 之后,我们不再需要强制捕获异常。如果 SQL 语句运行存在异常,Spring 会抛出其内置特定的异常。...如上面 SQL 语句异常将会抛出 BadSqlGrammarException。除了这个异常之外,Spring 还定义很多数据库异常。 ?...Spring 默认在 org/springframework/jdbc/support/sql-error-codes.xml 归纳不同数据库厂商相关错误码。...使用 SQLErrorCodes#customTranslations ,然后在 sql-error-codes.xml 配置相关错误码转换的规则。 第三种方式改动最小,比较简单。
; 功能完整,支持标准SQL和JDBC。...第一个应用通过内嵌模式与数据库建立连接,同时也作为一个服务器启动,于是另外的应用(运行在不同的进程或是虚拟机上)可以同时访问同样的数据。...上述编号 0~20 的连接配置是 H2 默认提供的,编号 21 是我自行创建保存的,连接的密码因安全性不会保存下来。.../data/test;AUTO_SERVER=TRUE spring.datasource.username=sa spring.datasource.password=123456 spring.datasource.driverClassName...我们看看[42001-200]这个错误码,前面的 42001 是错误码,后面的 200 的 h2 的版本 大概意思就是:尝试执行无效的SQL语句时引发代码42001的错误,原因就是 H2 不支持 MySQL
https://blog.csdn.net/xmt1139057136/article/details/88684939 HTTP Status 有很多,其中最常见的应该是 500 错误了。...的解决办法!...HTTP Status 500 - Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException...Apache Tomcat/7.0.54 看错误提示,涉及到了SQL语句,这明显就是SQL语句与数据库表结构不统一导致的问题!...' 原因:未知的字段“STATUS”,表中缺少字段!
项目开发的时候遇到一个错误: org.springframework.jdbc.BadSqlGrammarException: ### Error querying database....Cause: java.sql.SQLException: ORA-06550: 第 8 行, 第 4 列: PLS-00103: 出现符号 ";"在需要下列之一时: . ( ) , * @ % &...### The error may exist in file [D:\Program Files\Workspaces\MyEclipse for Spring 2014\salesmanb2b\WebRoot...} ### Cause: java.sql.SQLException: ORA-06550: 第 8 行, 第 4 列: PLS-00103: 出现符号 ";"在需要下列之一时: . ( ) , *...; bad SQL grammar []; nested exception is java.sql.SQLException: ORA-06550: 第 8 行, 第 4 列: PLS-00103:
但是近几天开发的同事突然找到我说,最近几天开始批量查询会频频报错,希望我帮忙查看一下。 语句运行报错,听起来原因应该很简单吧,最大的可能就是备库没有打开,或者是ddl,dml语句之类的。...[2016.03.06 04:10:02.352]org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback...自己也尝试了dml的情况,错误信息也会有所不同。...[2016.03.09 11:04:56.274]org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback...for read-only access 这个错误和之前的基本是一致的。
引用自博客:http://jiwenke-spring.blogspot.com/ 下面我们看看Spring JDBC相关的实现,在Spring中,JdbcTemplate是经常被使用的类来帮助用户程序操作数据库...execute()基本方法,然而这里的回调实现是 Spring 为我们完成的查询过程 4 return execute(psc, new PreparedStatementCallback()...从上面我们看到 JdbcTemplate 提供了许多简单查询和更新功能,但是如果需要更高层次的抽象,以及更面向对象的方法来访问数据库。...在 JdbcTemplate 中,具体的调用可以参考书中的例子 - 是通过以下调用起作用的: 1public Object execute(String sql, PreparedStatementCallback...使用的例子,可以看到使用 Spring JDBC 可以帮助我们完成许多数据库的操作。
使用 Spring Dat JDBC Mybatis 就是一个 SQL 模板引擎,而 JPA 做的太多,有没有一个适中的 ORM 来持久化聚合呢?...Spring Data JDBC 就是人们设计出来持久化聚合,从名字来看他不是 JDBC,而是使用 JDBC 实现了部分 JPA 的规范,让你可以继续使用 Spring Data 的编程习惯。...Spring Dat JDBC 的一些特点: 没有 Hibernate 中 session 的概念,没有对象的各种状态 没有懒加载,保持对象的完整性 除了 SPring Data 的基本功能,保持简单,...如果你使用 Spring Boot,可以直接使用 spring-boot-starter-data-jdbc 完成配置:spring-boot-starter-data-jdbc不过需要注意的是,Spring...Data JDBC 的逻辑: 如果聚合根是一个新的对象,Spring Data JDBC 会递归保存所有的关联对象。
数据库查询时,出现如下错误: Caused by: com.mysql.jdbc.exceptions.jdbc4MySQLSyntaxErrorException: In aggregated query...DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.mybatis.spring.SqlSessionTemplate...o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved exception caused by Handler execution: org.springframework.jdbc.BadSqlGrammarException...=only_full_group_by ; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException...设置不当引起的,修改下sql_mode即可: 查询: select version(), @@sql_mode; ?
数据库查询时,出现如下错误: Caused by: com.mysql.jdbc.exceptions.jdbc4MySQLSyntaxErrorException: In aggregated query...o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved exception caused by Handler execution: org.springframework.jdbc.BadSqlGrammarException...设置不当引起的,修改下sql_mode即可: 查询: select version(), @@sql_mode; 1.方式一 修改 SET sql_mode=(SELECT REPLACE(@@sql_mode...risks symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 在配置文件中添加指定的sql_mode.../systemctl restart mysqld.service 此时sql_mode的设置就持久化到mysql了,重启也不会出问题了。 查询文件位置:find .
此外,概念上非常简单的事情在 JPA 中变得相当困难。 Spring Data JDBC 旨在通过采用以下设计决策在概念上更简单: 如果您加载一个实体,SQL 语句就会运行。...完成此操作后,您将拥有一个完全加载的实体。没有进行延迟加载或缓存。 如果您保存一个实体,它将被保存。如果您不这样做,则不会。没有脏跟踪,也没有会话。 有一个关于如何将实体映射到表的简单模型。...此外,对于 Spring Data JDBC,这意味着可从聚合根访问的所有实体都被视为该聚合根的一部分。...Spring Data JDBC 假定只有聚合具有指向存储聚合的非根实体的表的外键,并且没有其他实体指向非根实体。...默认情况下,Spring Data 会尝试使用生成的属性访问器,并在检测到限制时回退到基于反射的访问器。 内容提示:本文(Spring Data JDBC参考文档)未完待续......
一、阅读线索 开始我们今天的对Spring的【模块阅读】,来看看Data Access的JDBC模块是怎么设计的。...Data Access with JDBC 也就是提供了数据访问的能力,我们可以使用其来进行各种数据库访问与操作。 先整体看下代码的组织结构,探索下阅读线索二。...datasource:包含一个易于DataSource访问的实用程序类和各种简单的DataSource实现。...这其中的每一个查询、更新方法就是遵循JDBC规范的模板方法。Spring就是通过这些模板方法来对数据源数据进行操作。 到这我们就解决了阅读线索二。...jdbc模块的核心设计就是两部分: 一是实现对数据源的访问连接。 二是通过JDBC规范的模板对数据源数据进行操作。 三、总结 我们再来看看阅读线索三,这方面我们从设计模式进行入手。
,历经千万bug,终于搞定,这里指提供mybatis中的配置,至于dao层的调用mybatis就自己上网查询下资料吧 1根据网上搜了一下资料,在sql-mapper.xml文件中写了如下配置可进行批量操作...Cause:java.sql.SQLException: 无效的列类型 上网继续查询说加上 <!...而JdbcType类则由不同的JDBC Driver提供,可能由于Driver(不同类型的数据库有不同的Driver)的不同会存在差异,不过大同小异。...于是慢慢替换了下Double,终于在Double写成DOUBLE的时候不在报这个错误了,此时配置如下 < insert id =”insertBatch” parameterType=”List...org.springframework.jdbc.BadSqlGrammarException: ### Error updating database.
之前团队的业务错误码定义是:业务服务前缀 + 业务模块 + 错误码,如果是识别不了的异常,则使用业务前缀 + 固定模块码 + 固定错误码。...当时我们临时的解决方案是通过spring.application.name来解决。因为全局异常代码块抽离出来后,最终还是要被服务引入的。...,我们的业务微服务项目有聚合层,某些聚合层是不需要依赖存储介质,比如mysql。...因此这些聚合层项目pom就不会引入类似mybatis相关的依赖。但我们的全局异常又需要类似mybatis相关的依赖,这样导致如果要引用全局异常模块,有得额外加入业务方不需要的jar。...同时这边有个细节点,就是全局异常可能就得细分,即把原来的大一统的全局异常,按业务场景分开,比如存储介质相关的存储异常,web相关异常 总结 本文主要讲当将全局异常抽离成jar,可能会发生的问题。
Spring对JDBC的最佳实践--上 引子 基于Template的JDBC使用方式 JDBC的尴尬 JdbcTemplate的诞生 JdbcTemplate的演化 模板方法模式与CallBack之间的关系...---- ---- 引子 在一开始,会介绍一下原生JDBC的使用,此时不会涉及到spring的使用,但是我们还是利用yml文件来存放数据源配置信息,因此我们需要一个yaml读取的工具类...JDBC知识点回顾教程 ---- 简单的jdbc工具类一览: public class JdbcUtil { private final String yamlFilePath; private...有非常多的重复性代码需要封装,这一点通过我们简单的封装一个jdbc工具类就可以看出,因此我们需要一个足够方便的,对jdbc的工具类,来简化我们对jdbc的操作,此时Spring的JdbcTemplate...,然后再读取出来,将图片保存到另一个目录下 完整测试源码如下,测试是成功,大家可以自行拷贝尝试: public class BlobTestMain { private static final
原标题:Spring认证|Spring Data JDBC参考文档三 (内容来源:Spring中国教育管理中心) 9.6.9. 身份证生成 Spring Data JDBC 使用 ID 来标识实体。...一个重要的约束是,在保存实体后,该实体不能再是新的。请注意,实体是否是新实体是实体状态的一部分。对于自动增量列,这会自动发生,因为 ID 由 Spring Data 使用 ID 列中的值设置。...乐观锁定 Spring Data JDBC 通过@Version在聚合根上注释的数字属性来支持乐观锁定 。...每当 Spring Data JDBC 使用这样的版本属性保存聚合时,会发生两件事:聚合根的更新语句将包含一个 where 子句,检查存储在数据库中的版本实际上未更改。...Spring Data JDBC 仅支持命名参数。 9.7.3. 命名查询 如果如上一节所述,注解中没有给出查询,Spring Data JDBC 将尝试定位一个命名查询。
视频内容 基本错误 缺少 DML 语句 一个完整的 Oceanus SQL 作业(JAR 作业里使用 SQL 语句)主要包含以下几个模块:Source(DDL)、Sink(DDL)和 INSERT(DML...open JDBC writer Caused by: java.sql.SQLException: Access denied for user 'joylyu'@'10.0.0.101' (using...password: YES) 主键问题 有 update/delete 数据(回撤流数据)的情况下,Sink 端必须定义主键,这种情况无主键定义或者主键定义错误也是语法检查失败常见的错误。...需尝试增加作业的算子并行度(CU)数和优化内存占用,避免内存泄露。...需尝试增加作业的算子并行度(CU)数和优化内存占用,避免内存泄露 JVM 退出等致命错误 进程退出码通常出现在以下关键字后,可以辅助定位 JVM 或 Akka 等发生了致命错误被强制关闭等的错误:exit
基本错误 缺少 DML 语句 一个完整的 Oceanus SQL 作业(JAR 作业里使用 SQL 语句)主要包含以下几个模块:Source(DDL)、Sink(DDL)和 INSERT(DML)语句。...JDBC writer Caused by: java.sql.SQLException: Access denied for user 'joylyu'@'10.0.0.101' (using password...: YES) 主键问题 有 update/delete 数据(回撤流数据)的情况下,Sink 端必须定义主键,这种情况无主键定义或者主键定义错误也是语法检查失败常见的错误。...需尝试增加作业的算子并行度(CU)数和优化内存占用,避免内存泄露。...需尝试增加作业的算子并行度(CU)数和优化内存占用,避免内存泄露 JVM 退出等致命错误 进程退出码通常出现在以下关键字后,可以辅助定位 JVM 或 Akka 等发生了致命错误被强制关闭等的错误:exit
领取专属 10元无门槛券
手把手带您无忧上云