我个人没有使用过 Oracle 做开发,不过以前就知道,要让 DbEntry 支持它是很困难的。最近,其它功能趋于完善,也考虑加入 Oracle 的支持,而且,因为项目论坛上的一些提议,已经加入了 Firebird 的支持,而 Firebird 也是使用序列的方式产生自增主键值,以前知道的 Oracle 的困难点已经跨越了一多半。
于是开工,仿照 Firebird,参考 Hibernate,编写了 Oracle 的方言,看起来很美。 用例子程序测试,马上发现问题,Decimal 无法转换为 Int32。是啊,Oracle 不支持 int, bigint, smallint 这些数据类型,在 hibernate 的方言里,也是使用的 number(10,0) 之类的方式,我也是一样,这样,返回的是 Decimal 也在情理之中。
于是在 Oracle 管理程序中,使用一些 SQL 语句测试,发现,Create 语句中,支持 INT,查看创建出的表,是 number(*,0)。不指定数字大小么?也是一个思路,于是把主键设置为 number(*,0),输入1,支持,输入12位数字,还是支持,用程序访问,DataReader.GetInt32(),在第一个数字的时候正常返回,遇到第二个数字出异常,也算合理。但是发现,如果使用 DataReader[index] 之类的方式取数据的话,还是得到 Decimal。
也许是微软提供的 Provider 不完善吧,于是换用 Oracle 自己提供的 ODP.NET,这一次,连 DataReader.GetInt32() 也会出异常了……
本来挺生气,可是仔细想一想,也就明白了,数据库中根本就没有这个数字是 Int32 还是 Int64 之类的信息,作为驱动程序,自然也无法智能的猜到数据类型了。
已经走了这么远了,就应该走完吧,既然数据库本身没有这些信息,就由我来告诉它吧。编写了一个 StupidDataReader 用来包装 OracleDataReader,在构造函数中把各个列的类型信息传递给它,由它在内部做类型转换工作。
测试,成功。呼呼,终于支持了 Oracle 。
分享到:
相关推荐
【作品名称】:泰迪杯 : 基于 python 实现 运输车辆安全驾驶行为的分析 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 在车辆运输过程中,不良驾驶行为主要包括疲劳驾驶、急加速、急减速、怠速预热、 超长怠速、熄火滑行、超速、急变道等。 针对以上运输车辆的不良驾驶行为,给出不同不良驾驶行为的判别标准,行车安全评价模型如下: 疲劳驾驶:连续行车时间超过4小时。 提取数据思路:若某一行acc_state列值为1并且gps_speed列数值大于0,则认为汽车开始启动,继续扫描数据表,直到寻找到一行gps_speed列的数值为0,则认为汽车已经处于停止状态,再根据location_time列由两个数据获取时间间隔,判断是否属于疲劳驾驶。 急加速、急减速:每两个经纬度间汽车的加速度达到或者超过20km/s^2。两个经纬度间汽车的加速 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。
基于springboot的校园社交平台源码数据库文档.zip
scipy-1.7.1-cp37-cp37m-linux_armv7l.whl
java源码资源EJB 模拟银行ATM流程及操作源代码提取方式是百度网盘分享地址
pillow-11.0.0-cp39-cp39-linux_armv7l.whl
java面试视频资源微服务架构之Spring Cloud Eureka 场景分析与实战提取方式是百度网盘分享地址
基于springboot+vue的音乐播放系统源码数据库文档.zip
matplotlib-3.5.0-cp37-cp37m-linux_armv7l.whl
onnxruntime-1.16.2-cp311-cp311-win_amd64.whl
基于springboot复兴村医疗管理系统源码数据库文档.zip
环境说明: 开发软件:VS 2017 (版本2017以上即可,不能低于2017) 数据库:SqlServer2008r2(数据库版本无限制,都可以导入) 开发模式:mvc
onnxruntime-win-x64-gpu-1.19.2.zip
bimdata_api_client-4.0.7-py3-none-any.whl
基于springboot的实验室开放管理系统源码数据库文档.zip
Pillow-9.2.0-cp39-cp39-linux_armv7l.whl
STM32神舟III号例程源码STM32芯片按键点灯-无防抖(STM32神舟III号-寄存器版)提取方式是百度网盘分享地址
基于springboot医疗废物管理系统源码数据库文档.zip
基于springboot的车辆保险理赔平台源码数据库文档.zip