对于这两个模糊查询语句:
1.select * from test where name like '%?%'
2.select * from test where name like '%'||?||'%'
(其中?表示参数)
是等价的,一样的,但为什么 我在JAVA程序中用了第一个却查不出结果,而第2个却能查到
这是为什么 呢?

解决方案 »

  1.   

    insert into table values(?)
    这时候是正确的。
    insert into table values('?')
    就应该不对了吧。道理相同。
      

  2.   

    楼上说的很对,如果是查询的话,第一个是对的。。
    但是如果insert的话。。就要考虑引号的问题了。
    insert into table values(?) 
    这时候是正确的。 
    insert into table values('?') 
    就应该不对了吧。 
      

  3.   

    晕 都什么啊 你在查询分析器里或者SQL/PLUS里 试试看都是可以查到的
    ?表示的是 传进去的参数,JDBC里面的预编译 一样 .还有楼上的 insert into table values('?') 这谁都知道是错误的 
      

  4.   

    ?和‘?’是不等价的。1.select * from test where name like '%?%' 
    2.select * from test where name like '%||?||%'
    这两个才是等价的。 
      

  5.   

    楼主
    事实似乎和你想的不太一样
    我在pl/sql developer中运行了
    select * from test where name like '%'||?||'%' 
    这个是报错的。机器只会理解成
    select * from test where name like '%'
    这样查出来是所有的姓名
    如果像楼主那样写机器是识别不了的
      

  6.   

    晕 9楼的 不用运行就该知道执行select * from test where name like '%'||?||'%' 这是会出错的
    我已经说的很明白了 ? 表示的是参数 ,不要单纯的从数据库方面去看到 要放到JAVA代码中去看
    哎 怎么就没有人明白的呢 
    10楼说 '%?%' 和 '%'||'?'||'%' 才应当是等价的 也是没有明白 
    如果9楼的执行select * from test where name like '%'||'?'||'%'保证是不会抱错了
    如果大家 使用过JDBC 或者 SPRING 的话 就应该明白这?到底表示什么意思了