文档章节

SQL 和 JDBC 中的数据类型映射

YuanyuanL
 YuanyuanL
发布于 2015/01/06 14:04
字数 542
阅读 55
收藏 0

sql常规:  http://www.tutorialspoint.com/jdbc/jdbc-data-types.htm

                http://www.cnblogs.com/shishm/archive/2012/01/30/2332142.html

postgresql: http://postgresql.nabble.com/PostgreSQL-data-types-mapped-Java-classes-for-JDBC-td3205204.html#a3205425

postgresql中几个特殊数据类型:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=20726500&id=3853881

money的输入输出形式依赖于数据库的lc_monetary参数:

  1. postgres=# show lc_monetary;
                         lc_monetary
    -----------------------------------------------------
     Chinese (Simplified)_People's Republic of China.936
    (1 行记录)
    postgres=# select 1.1::money;
     money
    --------
     ¥1.10
    (1 行记录)
    postgres=# set lc_monetary='C';
    SET
    postgres=# select 1.1::money;
     money
    -------
     $1.10
    (1 行记录)

这里却有一个不同的地方,lc_monetary参数不仅仅影响了money的输入输出形式,还规定的money的语义(币种)。我们知道10美元和10人民币是不能划上等号的,而单独的money的存储格式里却不包含币种信息。所以money还不能算作真正的货币类型,这其实也限制了money在整个数据库里只能有一个统一的币种。
不仅如此,有些API在处理money时也犯了难,比如:pgjdbc将money映射为java的double,并假设货币为美元对服务端返回的money字符串进行解析。这导致对服务端的lc_monetary参数值为美元以外的货币时,pgjdbc将会解析失败(*1)。npgsql将money映射为.net的decimal类型,并在解析时假设货币的小数位数一定是2位。这样在那些不符合这一假设的货币上就悲剧了,比如100日圆通过npgsql读出来就成了1日圆(*2)。

鉴于以上种种,建议避开money的使用,改用decimal 或者 numeric。

*1)回避方法为使用ResultSet.getString()直接获取字符串避开解析过程。
*2)开发版的npgsql已经解决了这个问题,方法为在建立连接时强制将lc_monetary参数值设为C,即美元。
*)在8.2及之前版本的文档里,曾声明货币数据类型是将要被废弃的一种数据类型,不推荐使用。但8.3有对其进行了改进,存储大小也有4字节扩大到8字节。手册追加了一些使用上的说明,并删掉了“将要被废弃”的描述。



© 著作权归作者所有

YuanyuanL

YuanyuanL

粉丝 154
博文 325
码字总数 190992
作品 0
济南
部门经理
私信 提问
MyBatis 实践 -Mapper与DAO

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hanqing280441589/article/details/50760236 标签: Java与存储 MyBatis简介 MyBatis前身是iBatis,是一个基于...

菜鸟-翡青
2016/02/28
0
0
MyBatis源码窥探:MyBatis整体架构解析

Mybatis的使用这里就不介绍了,不知道怎么使用的朋友可以点击 http://www.mybatis.org/mybatis-3/zh/index.html 这里面的教程很详细,包括xml的配置、映射、动态sql都有介绍,可以学习和使用...

java邵先生
01/15
0
0
SQL--( 初识 MyBatis)

MyBatis介绍 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手...

姜白告
2018/08/06
0
0
【PDF分享】Hibernate参考手册3.5.3(中文版).pdf

在今日的企业环境中,把面向对象的软件和关系型数据库一起使用可能是相当麻烦和浪费时间的。Hibernate 是一个面向 Java 环境的对象/关系型数据库映射工具。对象/关系型数据库映射(object/re...

鉴客
2010/09/12
3.3K
6
深入分析 iBATIS 框架之系统架构与映射原理

简介: iBATIS 通过 SQL Map 将 Java 对象映射成 SQL 语句和将结果集再转化成 Java 对象,与其他 ORM 框架相比,既解决了 Java 对象与输入参数和结果集的映射,又能够让用户方便的手写使用 ...

老盖
2010/11/11
2.2K
3

没有更多内容

加载失败,请刷新页面

加载更多

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

import java.util.Arrays; public class Solution { public int MoreThanHalfNum_Solution(int [] array) { Arrays.sort(array); int count=0; for(int i=0;i<array.le......

南桥北木
6分钟前
0
0
关于FLAG_ACTIVITY_NEW_TASK的使用

参考文章: https://blog.csdn.net/u010389391/article/details/78558475 Context调用startActivity, 有部分情况会报出如下错误: Caused by: android.util.AndroidRuntimeException: Calli......

Gemini-Lin
22分钟前
0
0
Python开发工具:Webware for Python

原文来之:https://www.oschina.net/p/webware+for+python 前言 Webware for Python 是一组 Python 包和工具用来开发面向对象的 Web 应用。良好的设计模式,包含一个快速的应用服务器、Servl...

A_裙232550246
30分钟前
0
0
高并发场景下的缓存有哪些常见的问题?

一、缓存一致性问题 当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。 这就比较依赖缓存的过期和更新...

别打我会飞
45分钟前
3
0
List list = new ArrayList()为何父类引用指向子类对象(多态)

态:要有继承,方法的重写,父类引用指向子类对象 疑问一:父类引用指向子类对象 与指向父类对象 Animal cat = new Cat(); //向上转型。 父类引用指向子类对象,该引用不能再访问子类新增加的...

architect刘源源
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部