如题。
在oracle中,对一张表A检索的时候,假设字段a(Number型)是index,
1. select * from A where a = 1
2. select * from A where a = '1'Q1
用PreparedStatement 的setString来设定a的话,是不是在oracle端,是2的情况?
还是oracle自动会判断,如果是number的话,就执行1.?
Q2
2.的情况index是不是就不起作用了?
在oracle中,对一张表A检索的时候,假设字段a(Number型)是index,
1. select * from A where a = 1
2. select * from A where a = '1'Q1
用PreparedStatement 的setString来设定a的话,是不是在oracle端,是2的情况?
还是oracle自动会判断,如果是number的话,就执行1.?
Q2
2.的情况index是不是就不起作用了?
一般是select * from A where a=:1这种参数绑定的sql形式,这样可以避免特殊符问题2.oracle优先是把字符串转成数字,刚刚试了一下,解释时会加上to_number,如果a='a'会报错
不好意思,不是很明白楼上的回答。第2个问题的意思是: a(Number型)是索引的时候
1. select * from A where a = 1
2. select * from A where a = '1'
上面2种写法,效率是不是不同。
1.是正确的写法,因为a是索引,所以检索会很快。
但是我不知道2.这样写,a的索引作用会不会保留?如果2.这种写法不行的话,就回到我第一个问题了。
在java端,用PreparedStatement 的setString来设定一个number型的字段的时候,
最后oracle执行的时候会按照哪种sql来检索呢?
或者说大家平时用PreparedStatement 的时候,都是根据DB字段的类型来使用其中的方法的么?
一般setString可以对Number型的字段付值也不会报错,而且java端,从画面过来的变量大多都是string型的,
所以用setString会方便很多。
但是碰到index这些字段,如果真的会影响效率的话,
这样在java端的话,势必要按照DB字段的类型来使用PreparedStatement了。
也就是默认转换为:select * from A where a=to_number('1')
楼主直接看sql的解释计划就明白了