第五篇:Spring整合JdbcTemplate

一 JdbcTemplate 简介
为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架。
JdbcTemplate提供了很多增删改查方法,很方便,以下是常用的查询和更新方法。update方法可以执行插入、更新、删除操作。
在这里插入图片描述

二 创建Spring工程

1 导入jar包
在这里插入图片描述
2applicationContext.xml配置如下

<!--导入资源文件  -->
	<context:property-placeholder location="classpath:db.properties"/>
	<!--配置 C3P0 数据源  -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="user" value="${jdbc.user}"></property>
		<property name="password" value="${jdbc.password}"></property>
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
		<property name="driverClass" value="${jdbc.driverClass}"></property>
		<property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property> 
	</bean>
	<!-- 配置 Spirng 的 JdbcTemplate -->
	 <bean id="jdbcTemplate" 
		class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

3配置数据库配置文件db.properties

jdbc.user=user
jdbc.password=123456
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC

jdbc.initPoolSize=5
jdbc.maxPoolSize=10

※ serverTimezone是指定时区,其中UTC代表的是全球标准时间,当然也可以配置其他标准,如果不配置,会报如下错误:
java.sql.SQLException: The server time zone value ‘?й???’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

4创建练习表
如果数据库中有表,可以直接拿来使用就可以。
CREATE TABLE user (
name varchar(255) DEFAULT NULL,
oprno int(255) unsigned zerofill NOT NULL,
email varchar(255) DEFAULT NULL,
phone int(255) DEFAULT NULL,
PRIMARY KEY (oprno)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

5单元测试代码

package com.java.spring.jdbc;

import java.util.List;
import java.util.Map;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

public class JDBCTest {
	ApplicationContext ctx ;
	JdbcTemplate jdbcTemplate;
	private List<Map<String, Object>> queryForList;
	{
		ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
		System.out.println(jdbcTemplate);
	}
	@Test
	public void testUpdate() {
		String sql = "UPDATE USER SET NAME=? WHERE NAME=? ";
		
		int result = jdbcTemplate.update(sql, "张三三","张三");
		System.out.println(result);
	}
	@Test
	public void testQuery() {
		String sql = "SELECT * FROM user where name=?"; 
		queryForList = jdbcTemplate.queryForList(sql, "李四");
		System.out.println(queryForList);
	}
	
}
@Test
	public void testInsert() {
		String sql = "INSERT INTO USER(NAME,email,phone,oprno) VALUES(?,?,?,?)";
		
		int result = jdbcTemplate.update(sql, "田六","123@qq.com","123456",123456);
		System.out.println(result);
	}

6遇到的问题
(1)报如下错误:
Spring 整合JdbcTemplate报错
警告: Exception encountered during context initialization - cancelling refresh attempt:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘jdbcTemplate’ defined in class path resource [applicationContext.xml]:
Instantiation of bean failed;
nested exception is org.springframework.beans.BeanInstantiationException:
Failed to instantiate [org.springframework.jdbc.core.JdbcTemplate]: No default constructor found;
nested exception is java.lang.NoClassDefFoundError: org/springframework/dao/DataAccessException
原因:缺少jar包 spring-tx-5.1.8.RELEASE.jar
(2)如下错误:

com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@6089fb5c – APPARENT DEADLOCK!!! Complete Status:
Managed Threads: 3
Active Threads: 3
Active Tasks:
省略…
java.sql.SQLException: Access denied for user 'root '@‘localhost’ (using password: YES)
原因:数据库配置文件中某处多空格,我的是user结尾处多了空格
在这里插入图片描述
(3)c3p0 连接错误,重启mySql服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值