当前位置 : 首页 » 文章分类 :  开发  »  Spring-JDBC

Spring-JDBC

Spring中的Jdbc简介及使用实例


spring写入mysql后时区不对相差12小时

spring 项目所在的服务器时区为 CST 没问题
mysql 时区是 CST 也没问题
但 spring 中 用 new Date() 写入的时间到 mysql 表中就慢了 12 小时
后来发现是 jdbc 连接时没设置时区

解决:
jdbc 连接 url 中增加 serverTimezone=Asia/Shanghai

spring.datasource.url = jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useAffectedRows=true

如何规避mysql的url时区的陷阱
https://www.jianshu.com/p/7e9247c0b81a


spring插入mysql乱码

产生乱码的根本原因在于:
1.客户机没有正确地设置client字符集,导致原先的SQL语句被转换成connection所指字符集,而这种转换,是会丢失信息的,如果client是utf8格式,那么如果转换成gb2312格式,这其中必定会丢失信息,反之则不会丢失。一定要保证connection的字符集大于client字符集才能保证转换不丢失信息。

  1. 数据库字体没有设置正确,如果数据库字体设置不正确,那么connection字符集转换成database字符集照样丢失编码,原因跟上面一样。

在java连接mysql时,连接语句可设置字符集,语法如下,注意表名跟属性设置之间用问号连接

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8", "root", "syq");

我的情况,mysql字符集设置都是默认的,没改过:

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

spring连接mysql时没有设置连接字符集,导致插入的中文都是问号,改为如下即可:

spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://mysqlhost:3306/blog?useUnicode=true&characterEncoding=UTF-8&useAffectedRows=true
spring.datasource.username = username
spring.datasource.password = passwd

JdbcTemplate

Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。
JdbcTemplate位spring-jdbc-3.2.7.RELEASE.jar包于中。其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate还需包spring-tx-3.2.4.RELEASE.jar,这个包含了一下事务和异常控制

JdbcTemplate主要提供以下五类方法:

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
  • query方法及queryForXXX方法:用于执行查询相关语句;
  • call方法:用于执行存储过程、函数相关语句。

数据库参数配置db.properties:

jdbc.user=root
jdbc.password=123456
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc\:mysql\:///test

Spring配置文件applicationContext.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="driverClass" value="${jdbc.driverClass}"></property>
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
</bean>

<!-- 配置一个JdbcTemplate实例,并注入一个dataSource数据源 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"></property>
</bean>

java测试代码:

//启动IoC容器
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
//获取IoC容器中JdbcTemplate实例
JdbcTemplate jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");
String sql="insert into user (name,deptid) values (?,?)";
int count= jdbcTemplate.update(sql, new Object[]{"caoyc",3});
System.out.println(count);

Spring JdbcTemplate详解
http://www.cnblogs.com/caoyc/p/5630622.html


上一篇 Hexo博客(11)添加网易云跟帖评论系统

下一篇 JavaScript

阅读
评论
913
阅读预计4分钟
创建日期 2017-05-25
修改日期 2020-01-05
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论