Mysql与java对应的类型表
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)。
| MySQL数据类型 | JDBC类型(getColumnTypeName) | 默认返回的Java类型(getColumnClassName) | 
|---|---|---|
| BIT(1)(new in MySQL-5.0) | BIT | java.lang.Boolean | 
| BIT( > 1)(new in MySQL-5.0) | BIT | byte[] | 
| TINYINT | TINYINT | java.lang.Booleanif the configuration propertytinyInt1isBitis set totrue(the default) and the storage size is 1, orjava.lang.Integerif not. | 
| BOOL,BOOLEAN | TINYINT | See TINYINT, above as these are aliases forTINYINT(1), currently. | 
| SMALLINT[(M)] [UNSIGNED] | SMALLINT [UNSIGNED] | java.lang.Integer(regardless of whether it isUNSIGNEDor not) | 
| MEDIUMINT[(M)] [UNSIGNED] | MEDIUMINT [UNSIGNED] | java.lang.Integer(regardless of whether it isUNSIGNEDor not) | 
| INT,INTEGER[(M)] [UNSIGNED] | INTEGER [UNSIGNED] | java.lang.Integer, ifUNSIGNEDjava.lang.Long | 
| BIGINT[(M)] [UNSIGNED] | BIGINT [UNSIGNED] | java.lang.Long, if UNSIGNEDjava.math.BigInteger | 
| FLOAT[(M,D)] | FLOAT | java.lang.Float | 
| DOUBLE[(M,B)] | DOUBLE | java.lang.Double | 
| DECIMAL[(M[,D])] | DECIMAL | java.math.BigDecimal | 
| DATE | DATE | java.sql.Date | 
| DATETIME | DATETIME | java.sql.Timestamp | 
| TIMESTAMP[(M)] | TIMESTAMP | java.sql.Timestamp | 
| TIME | TIME | java.sql.Time | 
| YEAR[(2|4)] | YEAR | If yearIsDateTypeconfiguration property is set tofalse, then the returned object type isjava.sql.Short. If set totrue(the default), then the returned object is of typejava.sql.Datewith the date set to January 1st, at midnight. | 
| CHAR(M) | CHAR | java.lang.String(unless the character set for the column isBINARY, thenbyte[]is returned. | 
| VARCHAR(M) [BINARY] | VARCHAR | java.lang.String(unless the character set for the column isBINARY, thenbyte[]is returned. | 
| BINARY(M) | BINARY | byte[] | 
| VARBINARY(M) | VARBINARY | byte[] | 
| TINYBLOB | TINYBLOB | byte[] | 
| TINYTEXT | VARCHAR | java.lang.String | 
| BLOB | BLOB | byte[] | 
| TEXT | VARCHAR | java.lang.String | 
| MEDIUMBLOB | MEDIUMBLOB | byte[] | 
| MEDIUMTEXT | VARCHAR | java.lang.String | 
| LONGBLOB | LONGBLOB | byte[] | 
| LONGTEXT | VARCHAR | java.lang.String | 
| ENUM('value1','value2',...) | CHAR | java.lang.String | 
| SET('value1','value2',...) | CHAR | java.lang.String | 
3. 类型转换
上面我们看到MySQL的BIGINT默认转为Java的java.lang.Long,那是不是就不能转为String或其他数值类型了?答案是否定的!MySQL的JDBC(Connector/J)在字段类型与Java类型之间的转换是比较灵活的。一般来说,任何字段类型都可以转换为java.lang.String,任何数值字段类型都可以转换为Java的数据类型(当然会出现四舍五入、溢出、精度丢失的问题)。
下图展示了MySQL JDBC允许的跨类型相互转换。
| MySQL数据类型 | 可以被转换的Java类型 | 
|---|---|
| CHAR, VARCHAR, BLOB, TEXT, ENUM, and SET | java.lang.String, java.io.InputStream, java.io.Reader, java.sql.Blob, java.sql.Clob | 
| FLOAT, REAL, DOUBLE PRECISION, NUMERIC, DECIMAL, TINYINT, SMALLINT, MEDIUMINT, INTEGER, BIGINT | java.lang.String, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Double, java.math.BigDecimal | 
| DATE, TIME, DATETIME, TIMESTAMP | java.lang.String, java.sql.Date, java.sql.Timestamp | 
Mysql与java对应的类型表的更多相关文章
- MySql与Java的时间类型
		MySql的时间类型有 Java中与之对应的时间类型date java.sql.DateDatet ... 
- MySql与对应的Java的时间类型
		MySql的时间类型有 Java中与之对应的时间类型date java.sql.Date Date ... 
- mysql如何修改表类型(表引擎)
		参考阅读:http://www.manongjc.com/article/1205.html 最近遇到一个修改 MySQL 表类型的问题,以前在 phpmyadmin 管理 mysql 数据库时,建立 ... 
- java和mysql之间的时间日期类型传递
		摘自:http://blog.csdn.net/weinianjie1/article/details/6310770 MySQL(版本:5.1.50)的时间日期类型如下: datetime 8byt ... 
- SQLserver、MySQL、ORCAL查询数据库、表、表中字段以及字段类型
		一.SQLServer命令 1.查询SQLServer中的每个数据库 SELECT * from sysdatabases 2.查询SQLServer中指定数据库的所有表名 select name f ... 
- Java生鲜电商平台-商品分类表和商品类型表的区别与数据库设计
		Java生鲜电商平台-商品分类表和商品类型表的区别与数据库设计 二者服务的对象不一样 目的也是不一样的 商品分类是为商品服务的 用来管理商品 商品类型是为扩展属性服务的 用来管理属性 举例:[转] ... 
- Mysql 设计超市经营管理系统,包括商品信息表(goods) 和 商品类型表(goodstype)
		互联网技术学院周测机试题(一) 一 需求分析 为进一步完善连锁超市经营管理,提高管理效率,减少管理成本,决定开发一套商品管理系统,用于日常的管理.本系统分为商品管理.员工管理.店铺管理,库存管理等功 ... 
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的  映射 (了解),映射组成关系
		本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ... 
- MySQL学习笔记_4_MySQL创建数据表(下)
		MySQL创建数据表(下) 五.数据表类型及存储位置 1.MySQL与大多数数据库不同,MySQL有一个存储引擎概念.MySQL可以针对不同的存储需求选择不同的存储引擎. 2. showengines ... 
随机推荐
- Eclipse的视窗
			PackageExplorer 显示项目结构,包,类,及资源 Outline 显示类的结构,方便查找,识别,修改 Console 程序运行的结果在该窗口显示 Hierarchy 显示Java继承层次结 ... 
- oracle数据库使用PL/sql导入excel数据
			1.打开PL/SQL工具,菜单进入 工具>ODBC导入器(菜单列表倒数第二): 2.连接数据库与选择导入的excel文件表: 3.选择导入的表以及excel与数据库表字段之间的对应关系: 
- git撤销某次提交
			1.查询提交记录.进入目录,查看某人在此目录下的commit: panxi@ww-bj-panxi MINGW64 [path]/Business (feature/v2.3) $ git log f ... 
- PostgreSQL 之 CREATE FUNCTION
			官方文档 语法: CREATE [ OR REPLACE ] FUNCTION name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } d ... 
- 使用XCode7打包动态库(Framework)
			iOS中的静态库和动态库 概念 静态库(Static Library)以 .a 为后缀,它是你的源码的实现.m文件编译而成的二进制文件集合,需要配合上暴漏的.h文件使用,它在引用链接时拷贝至可执行文件 ... 
- 【leetcode】521. Longest Uncommon Subsequence I
			problem 521. Longest Uncommon Subsequence I 最长非共同子序列之一 题意: 两个字符串的情况很少,如果两个字符串相等,那么一定没有非共同子序列,反之,如果两个 ... 
- Thinking - 一些有效阅读的方法
			有策略,忌盲目.讲方法,别蛮干! 1- 阅读方法 1.1 做好眼前事 排除其他事项干扰,营造适合阅读的状态和环境,专注地投入阅读之中. 如果被一堆乱糟糟的事情烦扰,身心处于一个疲惫的状态,必然无法保持 ... 
- 【手记】解决Graphics.DrawImage带ImageAttributes在XP报内存不足的问题
			异常信息: System.OutOfMemoryException: 内存不足. 在 System.Drawing.Graphics.CheckErrorStatus(Int32 status) 在 ... 
- 部署zabbix监控平台(源码安装)
			案例:部署Zabbix监控平台 1 问题 本案例要求部署一台Zabbix监控服务器,一台被监控主机,为进一步执行具体的监控任务做准备: 安装LNMP环境 源码安装Zabbix 安装监控端主机,修改基本 ... 
- MongoTemplate 使用 _id 查询
			MongoTemplate mt; DBObject lisi = new BasicDBObject(); lisi.put("_id", new BasicDBObject(& ... 
