Java JDBC中,MySQL字段类型到JAVA类型的转换
转载自: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类型的转换相关推荐
- Java jdbc连接mysql 封装类
Java jdbc连接mysql 封装类 开发工具与关键技术:java. myelipse2017.jdk1.8 作者:Amewin 撰写时间:2019年5月26日 JDBC简介: JDBC全称为ja ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
- Java JDBC 连接MySQL数据库方法(IJ版)
Java JDBC 连接MySQL数据库方法(IJ版) 首先说一下IJ建立项目步骤: 1.新建一个Empty Project 2.新建一个Module 3.在src里新建一个Package 4.在Pa ...
- oracle mysql 常用语句(查询表中某字段有几种类型,及每种类型有多少个数、插入多行、查询前几行)
亲测有效 1.(1)查询表中某字段有几种类型,及每种类型有多少个数 select DISTINCT name user_name,count(*) num from patient GROUP BY ...
- java JDBC连接MySQL数据库调用存储过程进行查询
java JDBC连接MySQL数据库调用存储过程进行查询 主程序代码 工具类 文件信息 存储过程 结果截图 主程序代码 package Mysql;import util.JDBCUtils; im ...
- jdbc中mySQL语句单双引号_JDBC: 执行MySQL语句时,bit类型的数值在java代码中应该怎么表示?...
目录 Window's Note 记录自己在实际操作中用到的问题以及最后的解决方案 前提描述 注册页面用户填写信息后需要执行insert()方法向数据库中插入新用户的信息,需要插入的用户信息变量在数据 ...
- JAVA JDBC连接mysql编程
JDBC连接mysql编程 基本操作 package jdbc;import java.sql.Statement; import java.util.Scanner; import java.sql ...
- 不属于JAVA类中的变量_在Java中,不属于整数类型变量的是( )。_学小易找答案...
[单选题]整型数据类型中,需要内存空间最少的是( ). [单选题]下列语句序列执行后,i的值是( ). int i=16; do { i/=2; } while( i > 3 ); [填空题]布 ...
- java catch中抛出异常_简单了解Java编程中抛出异常的方法
任何Java代码都可以抛出异常,如:自己编写的代码.来自Java开发环境包中代码,或者Java运行时系统.无论是谁,都可以通过Java的throw语句抛出异常.从方法中抛出的任何异常都必须使用thro ...
最新文章
- 12岁上中科大,17岁哈佛博士,31岁成哈佛教授,学神认识一下?
- java通过url抓取网页数据-----正则表达式
- assets目录与res/raw目录下文件的区别
- python 绘制二维曲面_用python绘制曲面[复制]
- solr相关配置(搜索novel案例)
- 多平台的敏感信息监测工具-GShark
- JS学习之路系列总结二阴阳阵(此文犹如武林之中的易筋经,是你驰骋IT界的武功心法,学会JS五大阵法就学会了JS,博主建议先学三才阵)
- #500-7 [编程作业]3_4 念整数
- python装饰器原理wraps(method)(self)_理解Python中装饰器最佳方法~
- java 源文件结构_A005Java源文件结构
- Java 排序 - 冒泡排序
- Theo Mandel在其关于界面设计的著作中提出的3条黄金分割
- 解决Visual Studio输出中文乱码问题
- 关于主机的思维导图_思维导图正流行,现在教孩子还不晚(实操篇)
- JavaScript 编程精解 中文第三版 十九、项目:像素艺术编辑器
- 2022年运动品牌推荐,双十一运动装备推荐
- MagicaVoxel 0.99.1 使用说明
- 蓝桥杯题目 2682: 蓝桥杯2022年第十三届省赛真题-GCD
- selenium 解决滑块验证的问题,自动化登录12306中国铁路网
- 一元和二元的泰勒展开式
热门文章
- python爬取基金历史净值_Python爬取天天基金网历史净值数据
- gulp,grunt,bower,feoman,fis 简单说明
- 引入redis报错Bean method ‘redisConnectionFactory‘ not loaded because @ConditionalOnClass did not find
- SpringBoot项目启动时提示程序包不存在和找不到符号
- 前端那些年----Webstream快捷键备忘(mac)
- Bugku-CTF之你必须让他停下+头等舱
- Promise 基本用法
- Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发
- 关闭linux防火墙及selinux的关闭
- Php输出Xml报错:XML declaration allowed only at the start of the document