转载自:https://www.cnblogs.com/waterystone/p/6226356.html

1. 概述

  在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案。

2. 类型映射

   java.sql.Types定义了常用数据库(MySQL、Oracle、DB2等)所用到的数据类型,官名也叫JDBC类型。每个数据库产品的数据类型定义各不相同,但都有JDBC类型与之对应,如MySQL的BIGINT–>JDBC的BIGINT。

  而每个JDBC类型,都有默认的Java类型与之对应,即ResultSet.getObject()返回Object的具体类型,如JDBC的BIGINT–>Java的java.lang.Long;JDBC的BIGINT UNSIGNED–>Java的 java.math.BigInteger。

  我们可以通过ResultSet.getMetaData().getColumnTypeName(columnIndex)获取字段的JDBC类型,通过ResultSet.getMetaData().getColumnClassName(columnIndex)获取字段的Java类型。

  下图展示了MySQL类型类型、JDBC类型、Java类型的映射关系(源自:5.3 Java, JDBC and MySQL Types)。
  

3. 类型转换

  上面我们看到MySQL的BIGINT默认转为Java的java.lang.Long,那是不是就不能转为String或其他数值类型了?答案是否定的!MySQL的JDBC(Connector/J)在字段类型与Java类型之间的转换是比较灵活的。一般来说,任何字段类型都可以转换为java.lang.String,任何数值字段类型都可以转换为Java的数据类型(当然会出现四舍五入、溢出、精度丢失的问题)。

  下图展示了MySQL JDBC允许的跨类型相互转换。
  

4. 总结

  MySQL JDBC对每种字段类型,都有相应的Java类型与之对应,也可以转换为其他Java类型。但这种转换还不够灵活,如TIMESTAMP与java.util.Date就转换不了,只能人工转换。这里推荐使用MyBatis,它内置了许多TypeHander,支持各种基础数据类型间的转换(xxxTypeHandler),也支持自定义数据类型转换。
  

参考:

Java, JDBC and MySQL Types
Java 数据类型和 MySql 数据类型对应一览表
Mybatis源代码分析之类型转换

Java JDBC中,MySQL字段类型到JAVA类型的转换相关推荐

  1. Java jdbc连接mysql 封装类

    Java jdbc连接mysql 封装类 开发工具与关键技术:java. myelipse2017.jdk1.8 作者:Amewin 撰写时间:2019年5月26日 JDBC简介: JDBC全称为ja ...

  2. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  3. Java JDBC 连接MySQL数据库方法(IJ版)

    Java JDBC 连接MySQL数据库方法(IJ版) 首先说一下IJ建立项目步骤: 1.新建一个Empty Project 2.新建一个Module 3.在src里新建一个Package 4.在Pa ...

  4. oracle mysql 常用语句(查询表中某字段有几种类型,及每种类型有多少个数、插入多行、查询前几行)

    亲测有效 1.(1)查询表中某字段有几种类型,及每种类型有多少个数 select DISTINCT name user_name,count(*) num from patient GROUP BY ...

  5. java JDBC连接MySQL数据库调用存储过程进行查询

    java JDBC连接MySQL数据库调用存储过程进行查询 主程序代码 工具类 文件信息 存储过程 结果截图 主程序代码 package Mysql;import util.JDBCUtils; im ...

  6. jdbc中mySQL语句单双引号_JDBC: 执行MySQL语句时,bit类型的数值在java代码中应该怎么表示?...

    目录 Window's Note 记录自己在实际操作中用到的问题以及最后的解决方案 前提描述 注册页面用户填写信息后需要执行insert()方法向数据库中插入新用户的信息,需要插入的用户信息变量在数据 ...

  7. JAVA JDBC连接mysql编程

    JDBC连接mysql编程 基本操作 package jdbc;import java.sql.Statement; import java.util.Scanner; import java.sql ...

  8. 不属于JAVA类中的变量_在Java中,不属于整数类型变量的是( )。_学小易找答案...

    [单选题]整型数据类型中,需要内存空间最少的是( ). [单选题]下列语句序列执行后,i的值是( ). int i=16; do { i/=2; } while( i > 3 ); [填空题]布 ...

  9. java catch中抛出异常_简单了解Java编程中抛出异常的方法

    任何Java代码都可以抛出异常,如:自己编写的代码.来自Java开发环境包中代码,或者Java运行时系统.无论是谁,都可以通过Java的throw语句抛出异常.从方法中抛出的任何异常都必须使用thro ...

最新文章

  1. 12岁上中科大,17岁哈佛博士,31岁成哈佛教授,学神认识一下?
  2. java通过url抓取网页数据-----正则表达式
  3. assets目录与res/raw目录下文件的区别
  4. python 绘制二维曲面_用python绘制曲面[复制]
  5. solr相关配置(搜索novel案例)
  6. 多平台的敏感信息监测工具-GShark
  7. JS学习之路系列总结二阴阳阵(此文犹如武林之中的易筋经,是你驰骋IT界的武功心法,学会JS五大阵法就学会了JS,博主建议先学三才阵)
  8. #500-7 [编程作业]3_4 念整数
  9. python装饰器原理wraps(method)(self)_理解Python中装饰器最佳方法~
  10. java 源文件结构_A005Java源文件结构
  11. Java 排序 - 冒泡排序
  12. Theo Mandel在其关于界面设计的著作中提出的3条黄金分割
  13. 解决Visual Studio输出中文乱码问题
  14. 关于主机的思维导图_思维导图正流行,现在教孩子还不晚(实操篇)
  15. JavaScript 编程精解 中文第三版 十九、项目:像素艺术编辑器
  16. 2022年运动品牌推荐,双十一运动装备推荐
  17. MagicaVoxel 0.99.1 使用说明
  18. 蓝桥杯题目 2682: 蓝桥杯2022年第十三届省赛真题-GCD
  19. selenium 解决滑块验证的问题,自动化登录12306中国铁路网
  20. 一元和二元的泰勒展开式

热门文章

  1. python爬取基金历史净值_Python爬取天天基金网历史净值数据
  2. gulp,grunt,bower,feoman,fis 简单说明
  3. 引入redis报错Bean method ‘redisConnectionFactory‘ not loaded because @ConditionalOnClass did not find
  4. SpringBoot项目启动时提示程序包不存在和找不到符号
  5. 前端那些年----Webstream快捷键备忘(mac)
  6. Bugku-CTF之你必须让他停下+头等舱
  7. Promise 基本用法
  8. Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发
  9. 关闭linux防火墙及selinux的关闭
  10. Php输出Xml报错:XML declaration allowed only at the start of the document