概述:
数据库是应用的血液,如何让血液流动起来?这就需要JDBC
1、了解Spring的数据访问异常体系
如果纯JDBC进行数据操作时抛出SQLException 表示异常不明确可能出现异常
- 应用程序无法连接数据库
- 要执行的查询存在语法错误
- 查询所有使用的表或者列不存在
- 试图插入或更新的数据违反了数据库的约束
Spring具体化异常内容
例如:BadSqlGrammarException 、DuplicateKeyException
2、数据访问模块化
有些代码是重复的,这时候想模板化代码
3、配置数据源
- 通过JDBC驱动程序定义的数据源
- 通过JNDI查找的数据源
- 连接池的数据源
3.1使用JNDI相当于将数据源绑定到应用服务器上
方式一、xml
<jee:jndi-lookup id="dataSource" jndi-name="/jdbc/SpitterDS" resource-ref="true"/>
方式二:java
@Bean
public JndiObjectFactoryBean dataSource(){
JndiObjectFactoryBean jndiObjectFB = new JndiObjectFactoryBean();
jndiObjectFB.setJndiName("jdbc/SpitterDS");
jndiObjectFB.setResourceRef(true);
jndiObjectFB.setProxyInterface(javax.sql.DataSource.class);
return jndiObjectFB;
}
3.2 使用连接池
- Apache Commons DBCP
- c3p0
- BoneCP
配置DBCP BasicDataSource的方式
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
p:driverClassName="org.h2.Driver"
p:url="jdbc:h2:tcp://localhost/~/spitter"
p:password=""
p:initialSize="5"
p:maxActive="10" />
java方式:
@Bean
public BasicDataSource dataSource(){
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("org.h2.Driver");
ds.setUrl("jdbc:h2:tcp://localhost/~/spitter");
ds.setUsername("sa");
ds.setPassword("");
ds.setInitialSize(5);
ds.setMaxActive(10);
return ds;
}
3.3 基于JDBC驱动的数据源
DriverManagerDataSource:每次都创建一个新连接
SimpleDriverDataSource:解决特定的环境的类加载问题
SingleConnectionDataSource :每次只有一个连接
3.4 基于嵌入式数据Derby数据库
xml 方式
使用标签<jdbc:embedded-database> 引用Spring命名空间
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
"http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd"
<jdbc:embedded-database id="dataSource" type="H2">
<jdbc:script location ="com/habuma/spitter/db/jdbc/schema.sql"/>
<jdbc:script location="com/habuma/spitter/db/jdbc/test-data.sql"/>
</jdbc:embedded-database>
java方式
@Bean
public DataSource dataSource(){
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:schema.sql")
.addScript("classpath:test-data.sql")
.build();
}
4、通过profile来选择不同jdbc数据源
参考第三章。