JdbcTemplate和mysql对接中遇到的问题总结

Mysql中常见的数据类型

由于通过queryForList(sql)获取List<Map<String, Object>>数据时,经常会遇到类型转换异常问题,所以对常用数据库类型向java类型转换进行总结。
-int
-JdbcTemplate获取时会作为Integer进行处理,需要将其转型为Integer
-decimal
-JdbcTemplate获取时会作为BigDecimal进行处理,需要将其转型为BigDecimal
-float
-JdbcTemplate获取时会作为Float进行处理,需要将其转型为Float
-date,datetime
-JdbcTemplate获取时会作为Date进行处理,需要将其转型为java.util.Date,其实java.sql.Date也行
-varchar
-直接作为字符串处理,+""即可
-tinyint
-如果数据库中tinyint的长度设为1,JdbcTemplate获取时会将其当做Boolean处理,否则当成Integer处理,同样需要转型

JdbcTemplate与Mysql快速建立连接

  1. 创建数据库资源属性文件resources.properties

    proxool.maxConnCount=10
    proxool.minConnCount=5
    proxool.statistics=1m,15m,1h,1d
    proxool.simultaneousBuildThrottle=30
    proxool.trace=false
    db.driver.class=com.mysql.jdbc.Driver
    db.url=jdbc:mysql://localhost:3306/ldf?useUnicode=true&characterEncoding=utf8
    db.username=root
    db.password=123456 
  2. 创建JdbcTemplate实体配置文件my.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                               http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>classpath:resources.properties</value>
                </list>
            </property>
        </bean>
        <bean id="dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
            <property name="targetDataSource">
                <bean class="org.logicalcobwebs.proxool.ProxoolDataSource">
                    <property name="driver" value="${db.driver.class}" />
                    <property name="driverUrl" value="${db.url}" />
                    <property name="user" value="${db.username}" />
                    <property name="password" value="${db.password}" />
                    <property name="maximumConnectionCount"
                              value="15" />
                    <property name="minimumConnectionCount"
                              value="${proxool.minConnCount}" />
                    <property name="statistics" value="${proxool.statistics}" />
                    <property name="simultaneousBuildThrottle"
                              value="${proxool.simultaneousBuildThrottle}" />
                    <property name="trace" value="${proxool.trace}" />
                    <property name="houseKeepingTestSql" value="SELECT 1"/>
                    <property name="houseKeepingSleepTime" value="3600000" />
                    <property name="testBeforeUse" value="true"/>
                </bean>
            </property>
        </bean>
        <bean id="jdbcTemplateWp" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource">
                <ref bean="dataSource" />
            </property>
        </bean>
    </beans>
  3. 测试数据库连接MyTest.java

    public class MyTest {
    public static void main(String[] args){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:my.xml");
        JdbcTemplate jdbcTemplate = (JdbcTemplate)applicationContext.getBean("jdbcTemplateWp");
    
        String sql = "SELECT * FROM a WHERE weight>?";
        List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, new Object[]{43});
        for (Map<String, Object> map : result) {
            int id = (Integer) map.get("id");
            String name = map.get("name")+"";
            Date createdate = (Date)map.get("createdate");
            BigDecimal avg_grade = (BigDecimal)map.get("avg_grade");
            Float weight = (Float)map.get("weight");
            Integer sex = (Integer)map.get("sex");
            System.out.println(id+" "+name+" "+createdate+" "+avg_grade+" "+weight+" "+sex);
        }
    }
    }
  4. 在最近的项目中遇到一些任务比较耗时,调试JdbcTemplate比较耗时,可以通过自行快速创建数据库连接进行测试。

JdbcTemplate中的query函数

  1. 如果想以记录的形式返回结果,即List<Map<String, Object>>的结果集返回,可以使用queryForList(String sql, Object... args),在结果集中通过列名获取属性值,具体代码见MyTest.java。
    数据库表字段类型如下:
    这里写图片描述
    运行结果如下:
    这里写图片描述

  2. 如果想以实体集的形式返回,即List<Student>的形式,可以使用query(String sql, Object[] args, int[] argTypes, RowMapper<T> rowMapper)。列名和类的属性对应关系主要靠属性名(其实是set方法名)实现的。
    Student类的代码如下:Student.java

    public class Student {
        private String name;
        private BigDecimal avg_grade;
        private Date createdate;
        private float weight;
        private int sex;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public BigDecimal getAvg_grade() {
            return avg_grade;
        }
    
        public void setAvg_grade(BigDecimal avg_grade) {
            this.avg_grade = avg_grade;
        }
    
        public Date getCreatedate() {
            return createdate;
        }
    
        public void setCreatedate(Date createdate) {
            this.createdate = createdate;
        }
    
        public float getWeight() {
            return weight;
        }
    
        public void setWeight(float weight) {
            this.weight = weight;
        }
    
        public int getSex() {
            return sex;
        }
    
        public void setSex(int sex) {
            this.sex = sex;
        }
    
        @Override
        public String toString() {
            return "Student[name="+name+", createdate="+createdate+", avg_grade="+avg_grade+", weight="
                    +weight+", sex="+sex+"]";
        }
    }

    测试类如下:MyTest.java

    public class MyTest {
        public static void main(String[] args){
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:my.xml");
            JdbcTemplate jdbcTemplate = (JdbcTemplate)applicationContext.getBean("jdbcTemplateWp");
    
            String sql = "SELECT * FROM a WHERE weight>?";
            RowMapper rm = new BeanPropertyRowMapper(Student.class);
            List<Student> result = jdbcTemplate.query(sql, new Object[]{43}, rm);
            for (Student stu : result) {
                System.out.println(stu);
            }
    
        }
    }

    运行结果如下:
    这里写图片描述

java和数据库中的date类型

  1. 数据库中有data和datetime类型,date类型是具体到年月日,而datetime具体到时分秒,在JdbcTemplate获取时都会转型为Date类型。

  2. 通过字符串获取Date的方式:

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Date date = null;
    try {
        date = dateFormat.parse("2017-01-03");
    } catch (ParseException e) {
        e.printStackTrace();
    }
    System.out.println(date);
  3. 获取当前时间的前一天(前一月,前一年)

    Date today = new Date();
    calendar.setTime(today);
    calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 1);
    Date yesterday = calendar.getTime();
    calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
    Date lastMonth = calendar.getTime();
    calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 1);
    Date lastYear = calendar.getTime();
    System.out.println("yeaterday="+dateFormat.format(yesterday));
    System.out.println("lastMonth="+dateFormat.format(lastMonth));
    System.out.println("lastYear="+dateFormat.format(lastYear));

    输出结果如下:
    这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要使用JdbcTemplate连接MySQL数据库,您需要进行以下步骤: 1. 确保您的项目已添加了相关的依赖。对于Spring Boot项目,可以在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 2. 在您的应用程序配置文件,配置数据库连接信息。例如,在application.properties文件,添加以下内容: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 请将"your_database_name"替换为您要连接的数据库名称,"your_username"和"your_password"分别替换为您的数据库用户名和密码。 3. 创建一个JdbcTemplate bean。您可以在Spring Boot的配置类或任何其他适当的地方创建它。以下是一个示例: ```java @Configuration public class JdbcConfig { @Autowired private DataSource dataSource; @Bean public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(dataSource); } } ``` 这将使用上述配置的数据源创建一个JdbcTemplate实例。 现在,您可以在应用程序使用JdbcTemplate来执行数据库操作了。例如,您可以使用它执行SQL查询、插入、更新等操作。 希望这能帮到您!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值