oracle的double类型,JDBC中使用Oracle的binary_float和binary_double类型
binary_float和binary_double类型是从Oracle10g开始的两个新数据类型,在一定情况下,可以替代原有的number类型使用,具体大家可以去查相关的文档。
但是,由于JDBC jar包存在bug的原因,会出现如下的问题:
解决的办法目前有两种:
1. 使用ojdbc14.jar,和上面帖子中一样,不使用rs.getDouble(("balance"),而是使用(Double)rs.getObject("balance")。
2. 使用ojdbc5.jar或者ojdbc6.jar,直接使用rs.getDouble(("balance"),也不会报错。
当然,按照《Java解惑》的建议,在需要精确计算的地方(如货币计算),应该使用int、long或者BigDecimal,所以我在这里贴一段示例代码:
@Override public int withdrawMoney(String accNum, int pwd, double balance) throws Exception { // TODO Auto-generated method stub String sql = "select a.balance from t_accout a where a.accnum = ? and a.pwd = ?"; int result = -1; Connection conn = null; PreparedStatement pstm = null; ResultSet rs = null; try { conn = getConn(); pstm = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); pstm.setString(1, accNum); pstm.setInt(2, pwd); rs = pstm.executeQuery(); if(rs.next()) { //如果成立,则说明找到了数据; // 使用ojdbc14.jar的情况 // double temp = (Double)rs.getObject("balance"); // 使用ojdbc6.jar的情况 // double temp = rs.getDouble("balance"); // 这里需要注意,由于double类型精度不高,所以需要使用BigDecimal类来进行操作 BigDecimal temp = rs.getBigDecimal("balance"); //判断当前是帐户的余额是否大于所要取的数量 if(balance > temp.doubleValue()) { result = 0; //表示余额不足 } else { //表示余额足够,则做更新 // 这里需要注意,由于double类型精度不高,所以需要使用BigDecimal类来进行操作,具体可以参考《Java解惑》谜题2:找零时刻;但是与书中所说不同的是:这里我使用了new BigDecimal(double),但是并没有出现他所说的问题。 rs.updateDouble("balance", temp.subtract(new BigDecimal(balance)).doubleValue()); rs.updateRow(); //在线更新 result = 1; } } else { result = -1; //表示没有找到数据,也就是帐号或密码出错. } } catch (Exception e) { e.printStackTrace(); } finally { releaseAll(conn, pstm, null); } return result; }
oracle的double类型,JDBC中使用Oracle的binary_float和binary_double类型相关推荐
- java代码连接oracle数据库连接_在JAVA中连接Oracle数据库(例子)
* TODO 要更改此生成的文件的模板,请转至 * 窗口 - 首选项 - java - 代码样式 - 代码模板 */ package person.fane.test; import java.sql ...
- 用ado把excel数据写入oracle,如何将excel表格数据导入到oracle数据库对应的表中?!oracle导出excel文件...
如何把excel里的表导入到oracle里 使用第三方工具吧,toad之类的 一个excel表格中有多个sheet,如何将其导入oracle数据库 户和要用DBA 最简单得建用户: create us ...
- 根据镜像安装oracle插件,docker镜像alpine中安装oracle客户端
1.背景 有项目需使用python连接oracle数据库,然后查询一些数据进行分析.在安装oracle客户端驱动过程中遇到了一些问题,在此记录下来分享读者. 一点限制: oracle数据库与本应用程序 ...
- pl sql如何调试oracle存储过程,PL/SQL Developer中调试oracle的存储过程
作者:iamlaosong 唉,真土,之前用Toad,1直用dbms_output.put_line调试存储进程,只觉得不方便,用上PL/SQL Developer后,习惯性的还是用这个方法,人都是有 ...
- python中函数type可以测试对象类型_Python中type函数type()显示对象的类型,dir函数dir()显示的是对象可用的方法。_学小易找答案...
[判断题]new_word = word.upper() 这一语句表示将word这个变量的值全部小写并赋给新变量new_word. [单选题]All of the students have fini ...
- Oracle报错createPool,Jmeter中连接Oracle报错Cannot create PoolableConnectionFactory
填坑贴,之前一直用jmeter2.13版本进行oracle测试,今天改为3.2版本,发现按照以往的方法执行测试,JDBC Request结果始终报错:Cannot create PoolableCon ...
- Oracle报错createPool,Jmeter中连接Oracle报错Cannot create PoolableConnectionFactory(示例代码)...
填坑贴,之前一直用jmeter2.13版本进行oracle测试,今天改为3.2版本,发现按照以往的方法执行测试,JDBC Request结果始终报错:Cannot create PoolableCon ...
- sqlplus查oracle存储过程,在SQL PLUS中调试Oracle存储过程
我们在通常情况下,开发和调试Oracle存储过程都是用可视化工具,如PL SQL DEVELOPER,TOAD等等.不会有人傻到要用 vim 去开发,再用 sql plus 去调试的存储过程的.但在有 ...
- mysql数据库中的int类型_MySQL中int(M)和tinyint(M)数值类型中M值的意义
在一开始接触MySQL数据库时,对于int(M)及tinyint(M)两者数值类型后面的M值理解是最多能够插入数据库中的值不能大于M: 后来工作后,也是一边学习一边使用,之后的理解是其中的M的意思是插 ...
- php检测数组类型,javascript中通过哪些方法来检测数组类型?
typeof操作符. 对于Function.String.Number.Undefined这几种类型的对象来说,不会有什么问题,但是针对Array的对象就没什么用途了:alert(typeof nul ...
最新文章
- Gradle's dependency cache may be corrupt解决方法
- 把整个DIV变成超链接
- open Session In View和过滤器配置
- Framebuffer 机制
- 欧拉函数和最大公约数的组合应用
- Linux系统查看位数和内存
- 解决mysql操作1045错误,1153错误和1130错误
- DataBinding 学习系列(2)详解DataBinding在xml中的使用
- c语言分配多一个字符空间,关于C语言动态给字符串分配内存空间问题
- Lync Server 2010迁移至Lync Server 2013故障排错 Part3 :内外网共享PPT提示证书问
- 想要成为架构师?先看看这些条件满不满足!
- 23种设计模式(二十一)数据结构之职责链
- VMWareStation10 密钥
- pyltp依存句法分析_pyltp的简单使用
- 贴片电阻阻值代码对照表
- 开源开放 | Gowild 狗尾草“七律”知识图谱进入 OpenKG,开放 8000 万中文百科知识三元组数据...
- 概率论与数理统计 基本概念
- phython学习笔记1
- 洛谷 P2440 木材加工 (二分答案)
- php钓鱼怎么使用方法,还不会用小药钓鱼的朋友们,请往这里看看!
热门文章
- Daily Scrum 12.13
- IIS安装程序无法复制文件的问题 安装IIS提示安装程序无法复制文件staxmem.d...
- VS中一点正则表达式使用心得
- 20200709每日一句
- 20191121每日一句
- 181023词霸有道扇贝每日一句
- 1.并发问题产生的三大根源与解决sync锁 目录 1. 并发问题产生的三大根源	1 1.1. 原子性 CPU缓存会导致可见问题 指令重排序	1 2. 并发问题根源之一:CPU切换线程执导致的
- Atitit httpclient feign使用总结RestTemplate Httpclient重要的功能 重试与超时 1.RedirectExec执行器的默认策略是,在接收到重定向错误码3
- Atitit java 原生 客户端 native desktop桌面 javafx 浏览器环境 导入jar jfxrt.jar 17M package com.attilax.ui;
- Julia:调用python函数的几种方法