Oracle数据类型引起的性能问题(已经解决)!

为避免SQL-注入,所有的update,insert,delete,select全部使用带参数的形式编写

Update TableName Set FiledName=:Fd1 where Id=:Id

ID Oracle类型是 Varchar2对应DbType.String

问题来了,由于类型映射不匹配,导致在执行SQL时Oracle会自动转换类型,这样直接导致无法使用到索引(全部全表扫描),所以update,delete时效率特别差

后修改代码

ID Oracle类型是 Varchar2对应DbType.AnsiString

问题解决了,可以用使用到索引。

Oracle 数据类型

要绑定为参数的 DbType 枚举

要绑定为参数的 OracleType 枚举

备注

BFILE

BFile

Oracle 只允许将 BFILE 绑定为 BFILE 参数。 如果您尝试绑定一个非 BFILE 值(如 byte[] 或 OracleBinary),适用于 Oracle 的 .NET 数据提供程序并不会自动为您构造这样的值。

BLOB

Blob

Oracle 只允许将 BLOB 绑定为 BLOB 参数。 如果您尝试绑定一个非 BLOB 值(如 byte[] 或 OracleBinary),适用于 Oracle 的 .NET 数据提供程序并不会自动为您构造这样的值。

CHAR

AnsiStringFixedLength

Char

CLOB

Clob

Oracle 只允许将 CLOB 绑定为 CLOB 参数。 如果您尝试绑定一个非 CLOB 值(如 System.String 或 OracleString),适用于 Oracle 的 .NET 数据提供程序并不会自动为您构造这样的值。

DATE

DateTime

DateTime

FLOAT

Single、Double、Decimal

Float、Double、Number

Size 确定 System.Data.DBType 和 OracleType。

INTEGER

SByte、Int16、Int32、Int64、Decimal

SByte、Int16、Int32、Number

Size 确定 System.Data.DBType 和 OracleType。

INTERVAL YEAR TO MONTH

Int32

IntervalYearToMonth

只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。

INTERVAL DAY TO SECOND

Object

IntervalDayToSecond

只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。

LONG

AnsiString

LongVarChar

LONG RAW

Binary

LongRaw

NCHAR

StringFixedLength

NChar

NCLOB

NClob

Oracle 只允许将 NCLOB 绑定为 NCLOB 参数。 如果您尝试绑定一个非 NCLOB 值(如System.String 或 OracleString),适用于 Oracle 的 NET 数据提供程序并不会自动为您构造这样的值。

NUMBER

VarNumeric

Number

NVARCHAR2

String

NVarChar

RAW

Binary

Raw

REF CURSOR

Cursor

有关更多信息,请参见Oracle REF CURSOR。

ROWID

AnsiString

Rowid

TIMESTAMP

DateTime

Timestamp

只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。

TIMESTAMP WITH LOCAL TIME ZONE

DateTime

TimestampLocal

只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。

TIMESTAMP WITH TIME ZONE

DateTime

TimestampWithTz

只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。

UNSIGNED INTEGER

Byte、UInt16、UInt32、UInt64、Decimal

Byte、UInt16、Uint32、Number

Size 确定 System.Data.DBType 和 OracleType。

VARCHAR2

AnsiString

VarChar

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java 技术分享

WEB 小案例 -- 网上书城(一)

50150
来自专栏工科狗和生物喵

【计算机本科补全计划】Mysql 学习小计(2)

正文之前 昨天下午写了篇 Mysql学习小计,结果出乎意料的受欢迎?变相刺激了我多写点 Mysql?好吧,如尔所愿。我晚上反正还不知道学点啥,就把今天看的那个菜...

371110
来自专栏更流畅、简洁的软件开发方式

我的数据访问函数库的源代码(二)—— SQL语句部分

/* 2008 4 25 更新 */ 我的数据访问函数库的源码。整个类有1400行,原先就是分开来写的,现在更新后还是分开来发一下吧。 第二部分:SQL语句...

19990
来自专栏小筱月

java ssm框架实现分页功能 (oracle)

LIMIT a,b : 参数 a:第 a 条数据开始查询(不包括第 a 条), 参数 b:查询 b 条数据

92720
来自专栏公众号_薛勤的博客

Hibernate各种基本注解及一对一(多)关系映射采坑笔记

org.springframework.dao.InvalidDataAccessApiUsageException: detached entity pass...

10630
来自专栏杨建荣的学习笔记

关于db_files和maxdatafiles的问题(r4笔记第31天)

昨天在做生产监控的时候发现有个库的表空间不够了,就发邮件给客户的dba去处理,但是得到的反馈是尝试添加的时候发现已经超过了数据文件的最大数限制。这个错误毫无疑问...

36760
来自专栏Jerry的SAP技术分享

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

然后我把这段代码封装到一个Function moduleZDIS_GET_MATERIAL_IMAGES里,在Java代码里消费这个function modul...

12010
来自专栏坚毅的PHP

mysql数据迁移hbase问题

无法直接dump,写了java多线程程序做迁移 问题1:Operation not allowed after ResultSet closed 裸jdbc语句...

40450
来自专栏张善友的专栏

IBatisNet 之 自动生成主关键字

很多系统支持自动生成主关键字。一些数据库厂商预先生成(oracle),一些数据库厂商之后生成(mssal mysql).。如果你在<insert>元素中使用<s...

21380
来自专栏用户2442861的专栏

MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

  在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突。

9210

扫码关注云+社区

领取腾讯云代金券