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类型相关推荐

  1. java代码连接oracle数据库连接_在JAVA中连接Oracle数据库(例子)

    * TODO 要更改此生成的文件的模板,请转至 * 窗口 - 首选项 - java - 代码样式 - 代码模板 */ package person.fane.test; import java.sql ...

  2. 用ado把excel数据写入oracle,如何将excel表格数据导入到oracle数据库对应的表中?!oracle导出excel文件...

    如何把excel里的表导入到oracle里 使用第三方工具吧,toad之类的 一个excel表格中有多个sheet,如何将其导入oracle数据库 户和要用DBA 最简单得建用户: create us ...

  3. 根据镜像安装oracle插件,docker镜像alpine中安装oracle客户端

    1.背景 有项目需使用python连接oracle数据库,然后查询一些数据进行分析.在安装oracle客户端驱动过程中遇到了一些问题,在此记录下来分享读者. 一点限制: oracle数据库与本应用程序 ...

  4. pl sql如何调试oracle存储过程,PL/SQL Developer中调试oracle的存储过程

    作者:iamlaosong 唉,真土,之前用Toad,1直用dbms_output.put_line调试存储进程,只觉得不方便,用上PL/SQL Developer后,习惯性的还是用这个方法,人都是有 ...

  5. python中函数type可以测试对象类型_Python中type函数type()显示对象的类型,dir函数dir()显示的是对象可用的方法。_学小易找答案...

    [判断题]new_word = word.upper() 这一语句表示将word这个变量的值全部小写并赋给新变量new_word. [单选题]All of the students have fini ...

  6. Oracle报错createPool,Jmeter中连接Oracle报错Cannot create PoolableConnectionFactory

    填坑贴,之前一直用jmeter2.13版本进行oracle测试,今天改为3.2版本,发现按照以往的方法执行测试,JDBC Request结果始终报错:Cannot create PoolableCon ...

  7. Oracle报错createPool,Jmeter中连接Oracle报错Cannot create PoolableConnectionFactory(示例代码)...

    填坑贴,之前一直用jmeter2.13版本进行oracle测试,今天改为3.2版本,发现按照以往的方法执行测试,JDBC Request结果始终报错:Cannot create PoolableCon ...

  8. sqlplus查oracle存储过程,在SQL PLUS中调试Oracle存储过程

    我们在通常情况下,开发和调试Oracle存储过程都是用可视化工具,如PL SQL DEVELOPER,TOAD等等.不会有人傻到要用 vim 去开发,再用 sql plus 去调试的存储过程的.但在有 ...

  9. mysql数据库中的int类型_MySQL中int(M)和tinyint(M)数值类型中M值的意义

    在一开始接触MySQL数据库时,对于int(M)及tinyint(M)两者数值类型后面的M值理解是最多能够插入数据库中的值不能大于M: 后来工作后,也是一边学习一边使用,之后的理解是其中的M的意思是插 ...

  10. php检测数组类型,javascript中通过哪些方法来检测数组类型?

    typeof操作符. 对于Function.String.Number.Undefined这几种类型的对象来说,不会有什么问题,但是针对Array的对象就没什么用途了:alert(typeof nul ...

最新文章

  1. Gradle's dependency cache may be corrupt解决方法
  2. 把整个DIV变成超链接
  3. open Session In View和过滤器配置
  4. Framebuffer 机制
  5. 欧拉函数和最大公约数的组合应用
  6. Linux系统查看位数和内存
  7. 解决mysql操作1045错误,1153错误和1130错误
  8. DataBinding 学习系列(2)详解DataBinding在xml中的使用
  9. c语言分配多一个字符空间,关于C语言动态给字符串分配内存空间问题
  10. Lync Server 2010迁移至Lync Server 2013故障排错 Part3 :内外网共享PPT提示证书问
  11. 想要成为架构师?先看看这些条件满不满足!
  12. 23种设计模式(二十一)数据结构之职责链
  13. VMWareStation10 密钥
  14. pyltp依存句法分析_pyltp的简单使用
  15. 贴片电阻阻值代码对照表
  16. 开源开放 | Gowild 狗尾草“七律”知识图谱进入 OpenKG,开放 8000 万中文百科知识三元组数据...
  17. 概率论与数理统计 基本概念
  18. phython学习笔记1
  19. 洛谷 P2440 木材加工 (二分答案)
  20. php钓鱼怎么使用方法,还不会用小药钓鱼的朋友们,请往这里看看!

热门文章

  1. Daily Scrum 12.13
  2. IIS安装程序无法复制文件的问题 安装IIS提示安装程序无法复制文件staxmem.d...
  3. VS中一点正则表达式使用心得
  4. 20200709每日一句
  5. 20191121每日一句
  6. 181023词霸有道扇贝每日一句
  7. 1.并发问题产生的三大根源与解决sync锁 目录 1. 并发问题产生的三大根源 1 1.1. 原子性 CPU缓存会导致可见问题 指令重排序 1 2. 并发问题根源之一:CPU切换线程执导致的
  8. Atitit httpclient feign使用总结RestTemplate Httpclient重要的功能 重试与超时 1.RedirectExec执行器的默认策略是,在接收到重定向错误码3
  9. Atitit java 原生 客户端 native desktop桌面 javafx 浏览器环境 导入jar jfxrt.jar 17M package com.attilax.ui;
  10. Julia:调用python函数的几种方法